1. 程式人生 > 實用技巧 >通過添加註解@NeedLogin判斷請求是否需要登入

通過添加註解@NeedLogin判斷請求是否需要登入

  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>