springmvc项目添加@NeedLogin注解判断请求是否需要登录,所有添加注解的接口都需要登录后才能访问。

  添加@NeedLogin注解

1 /**
2  * 是否需要登录
3  * @author
4  */
5 @Retention(RetentionPolicy.RUNTIME)
6 @Target({ElementType.METHOD, ElementType.TYPE})
7 public @interface NeedLogin {
8     boolean value() default true;//是否需要登录 true 需要登录,false不需要登录
9 }

  添加拦截器CheckLoginInterceptor

/** 
* 需要登录

*
@author*/ public class CheckLoginInterceptor extends HandlerInterceptorAdapter { private static final Logger log = LoggerFactory.getLogger(CheckLoginInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod method = (HandlerMethod) handler; // 获取类和方法上的是否需要登录注解 NeedLogin loginController = method.getClass().getAnnotation(NeedLogin.class); NeedLogin needLoginMehtod = method.getMethodAnnotation(NeedLogin.class); // 类和方法上都无需要登录注解 if (!(loginController != null && loginController.value()) && !(needLoginMehtod != null && needLoginMehtod.value())){ return true; } //该方法需要校验是否登录
       //获取用户信息  
UserInfo userInfo = 获取用户信息; if (userInfo != null) { return true; } log.info("未登录访问需要登录的请求 {}", request.getRequestURI()); // 获取类和方法上的是否需要responseBody注解 RestController restController = method.getBean().getClass().getAnnotation(RestController.class); ResponseBody ResponseBodyController = method.getBean().getClass().getAnnotation(ResponseBody.class); ResponseBody responseBodyMethod = method.getMethodAnnotation(ResponseBody.class); // 是否接口方法 Boolean isApi = false; if(restController != null || responseBodyMethod != null || ResponseBodyController != null){ isApi = true; } if (!isApi) { // 用户为空,重定向去登录 // todo 跳转登录页return false; } // 请求接口,直接返回响应数据 response.reset(); //设置编码格式 response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.write(JSON.toJSONString(Result.error(ErrorCodeEnum.ERR_20003))); pw.flush(); pw.close(); return false; } return true; } }

  配置拦截器

<mvc:interceptor>
  <mvc:mapping path="/**"/>
  <bean class="com.common.interceptor.CheckLoginInterceptor"></bean>
</mvc:interceptor>

  

posted on 2020-12-21 15:09  田畕畾  阅读(401)  评论(0)    收藏  举报