Java Web检查用户登录状态(防止用户访问到非法页面)
更新时间:2023年09月01日 16:27:13 作者:Katniss的名字被占用
一般javaweb网站都有用户登录,而有一些操作必须用户登录才能进行,本文主要介绍了Java Web检查用户登录状态,具有一定的参考价值,感兴趣的可以了解一下
使用拦截器
- 在方法前标注自定义注解
- 拦截所有请求,只处理带有该注解的方法
自定义注解:
- 常用元注解:
@Target
,@Rentention
,@Document
,@Inherited
- 如何读取注解:
-Method.getDeclaredAnnotations()
-Method.getAnnotaion(Class<T> annotationClass)
业务场景:未登陆状态下,用户不能访问需要登陆才能访问的页面,例如修改个人信息页面等。
1. 自定义注解
package com.nowcoder.community.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LoginRequired { }
2. 在方法前加上该注解
@LoginRequired @RequestMapping(path = "/setting",method = RequestMethod.GET) public String getSettingPage(){ return "/site/setting"; }
3. 定义拦截器
package com.nowcoder.community.controller.Interceptor; import com.nowcoder.community.annotation.LoginRequired; import com.nowcoder.community.entity.User; import com.nowcoder.community.util.HostHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; @Component public class LoginRequireInterception implements HandlerInterceptor { @Autowired private HostHolder hostHolder; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(handler instanceof HandlerMethod) { // 拦截到类型为方法 HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); // 获取方法 LoginRequired loginRequired = method.getAnnotation(LoginRequired.class); // 获取方法的注解 if (loginRequired != null && hostHolder.getUser() == null) { // 方法是loginRequired且user没登陆,需要拦截 response.sendRedirect(request.getContextPath() + "/login"); return false; } } return true; } }
4. 配置拦截器
package com.nowcoder.community.config; import com.nowcoder.community.controller.Interceptor.AlphaInterceptor; import com.nowcoder.community.controller.Interceptor.LoginRequireInterception; import com.nowcoder.community.controller.Interceptor.LoginTicketInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private AlphaInterceptor alphaInterceptor; @Autowired private LoginTicketInterceptor loginTicketInterceptor; @Autowired private LoginRequireInterception loginRequireInterception; @Override public void addInterceptors(InterceptorRegistry registry) { // 通过重写addInterceptors()方法,可以配置拦截器,对请求进行预处理或后处理。 registry.addInterceptor(loginRequireInterception) .excludePathPatterns("/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg", "/**/*.jpeg"); } }
到此这篇关于Java Web检查用户登录状态(防止用户访问到非法页面)的文章就介绍到这了,更多相关Java 检查用户登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
SpringBoot集成Flink-CDC实现对数据库数据的监听问题
Flink CDC(Flink Change Data Capture)是一种基于数据库日志的CDC技术,它实现了一个全增量一体化的数据集成框架,这篇文章主要介绍了SpringBoot集成Flink-CDC,实现对数据库数据的监听,需要的朋友可以参考下2024-07-07spring cloud实现Eureka注册中心的HA的方法
本篇文章主要介绍了spring cloud实现Eureka注册中心的HA的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-01-01解读System.getProperty("ENM_HOME")中的值从哪获取的
这篇文章主要介绍了解读System.getProperty("ENM_HOME")中的值从哪获取的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
最新评论