spring添加注解@NeedLogin登录校验  springmvc项⽬添加@NeedLogin注解判断请求是否需要登录,所有添加注解的接⼝都需要登录后才能访问。  添加@NeedLogin注解
1/**
2 * 是否需要登录
3 * @author
4*/
5 @Retention(RetentionPolicy.RUNTIME)
6 @Target({ElementType.METHOD, ElementType.TYPE})
7public @interface NeedLogin {
8boolean value() default true;//是否需要登录 true 需要登录,false不需要登录
9 }
  添加CheckLoginInterceptor
/**
* 需要登录
* @author*/
public class CheckLoginInterceptor extends HandlerInterceptorAdapter {
private static final Logger log = Logger(CheckLoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod) handler;
// 获取类和⽅法上的是否需要登录注解
NeedLogin loginController = Class().getAnnotation(NeedLogin.class);
springmvc面试题常用注解
NeedLogin needLoginMehtod = MethodAnnotation(NeedLogin.class);
// 类和⽅法上都⽆需要登录注解
if (!(loginController != null && loginController.value()) && !(needLoginMehtod != null && needLoginMehtod.value())){
return true;
}
//该⽅法需要校验是否登录
       //获取⽤户信息 
UserInfo userInfo = 获取⽤户信息;
if (userInfo != null) {
return true;
}
log.info("未登录访问需要登录的请求 {}", RequestURI());
// 获取类和⽅法上的是否需要responseBody注解
RestController restController = Bean().getClass().getAnnotation(RestController.class);
ResponseBody ResponseBodyController = Bean().getClass().getAnnotation(ResponseBody.class);
ResponseBody responseBodyMethod = MethodAnnotation(ResponseBody.class);
// 是否接⼝⽅法
Boolean isApi = false;
if(restController != null || responseBodyMethod != null || ResponseBodyController != null){
isApi = true;
}
if (!isApi) {
// ⽤户为空,重定向去登录
// todo 跳转登录页return false;
}
// 请求接⼝,直接返回响应数据
//设置编码格式
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
PrintWriter pw = Writer();
pw.(ErrorCodeEnum.ERR_20003)));
pw.flush();
pw.close();
return false;
}
return true;
}
}
  配置
<mvc:interceptor>
  <mvc:mapping path="/**"/>
  <bean class="common.interceptor.CheckLoginInterceptor"></bean>
</mvc:interceptor>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。