登录状态的检查
1. 自定义注解
元注解
-
@Target 声明自定义注解,可以写的位置,作用类型(必用)
-
@Retention 声明自定义注解保留时间,有效时间(必用)
-
@Document 声明自定义注解在生成文档时要不要带
-
@Inherited 用于声明自定义注解是否继承
2. 实例
创建注解
//像创建类一样
@Target(ElementType.METHOD)//ElementType.METHOD注解作用于方法之上
@Retention(RetentionPolicy.RUNTIME)//程序运行时有效
public @interface LoginRequired {
}
创建拦截器
@Component
/***
* 对加了自定义注解LoginRequired的进行判断,不合理的进行拦截并重定向
*/
public class LoginRequiredInterceptor 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){
response.sendRedirect(request.getContextPath()+"/login"); //重定向登录页面
return false;
}
}
return true;
}
}
配置拦截类
//在WebMvcConfig.java类的addInterceptors方法里进行配置
registry.addInterceptor(loginRequiredInterceptor)//增加拦截
.excludePathPatterns("/**/*.css","/**/*.js","/**/*.png","/**/*.jpg","/**/*.jpeg");//设置排除拦截的目录(/**表示目录下所有文件夹)
//设置拦截全部请求(不设置add)
使用
//在想要登录拦截的方法上面添加注解即可