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>
浙公网安备 33010602011771号