前几篇文章里写了关于token的个人思考,那么具体在代码中要怎么实现拦截token,今天写了一段代码,记录一下
框架:SpringMVC Spring
运行环境:tomcat8
说一下思路:
1.自定一个注解,然后注解在我的Controller方法上
2.实现SpringMVC拦截器的类,重写PreHandler方法,拦截得到注解实现功能
3.需要在配置中配置拦截类的拦截路径
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/"/>
<bean class="Controller.AnnotationInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
/**
* Created by sam on 2017/7/21.
*/
public class AnnotationInterceptor extends HandlerInterceptorAdapter{
private Logger logger = Logger.getLogger(this.getClass());
@Override
public boolean preHandle(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
Object handler) throws Exception {
logger.debug("进行拦截器");
if(handler instanceof HandlerMethod){
logger.debug("获取到handler");
HandlerMethod hm = (HandlerMethod) handler;
Method method = ((HandlerMethod) handler).getMethod();
Token token = method.getAnnotation(Token.class);
if(token!= null){
logger.debug("token不为null");
String value = token.value();
request.setAttribute("txt",value);
}
}
return true;
}
}
值得注意的是:
在拦截器类里不一定能获取Handler,需要手动配置两个RequestMapping处理bean才能保证获得Handler
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
至于为什么这2个类配置上去就能保证获得Handler我也不太了解,我会去查找相关资料然后贴到博客!