背景:项目中发现很多方法中都需要做登录权限校验,而既存的解决方式是在每个方法里面都调用公共的校验方法,虽然说不影响使用,但是总想把重复的劳动给干掉,通过另一个方式简化.
想法:通过spring mvc拦截器+自定义注解的组合方式.拦截器中写校验代码,注解用来定位需要校验的方法.
1、定义注解类AccessToken
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 校验token tag
* @author xxx
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AccessToken {
}
2、写个拦截器类
public class MobileTokenInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
boolean flag = false;
if(handler instanceof HandlerMethod){
HandlerMethod hm = (HandlerMethod)handler;
Method method = hm.getMethod();
// 如果有AccessToken,需要鉴权
if(method.isAnnotationPresent(AccessToken.class)){
// 校验逻辑
flag = checkUser();
}
}
if(!flag){
// TODO 返回提示信息
}
return flag;
}
}
3、修改配置文件,增加以下代码
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/mobile/**" />
<bean class="com.xxxx.xxxx.interceptor.MobileTokenInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
4、在需要使用校验的方法上加AccessToken注解