SpringMVC中的Interceptor拦截器是链式的,可以同时存在多个Interceptor,这种链式结构也是可以进行中断的,当Handle方法返回false的时候整个请求就结束了
1. 继承HandlerInterceptor类
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
}
2. 重写preHandle方法
/**
*preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return super.preHandle(request, response, handler);
}
/**
* postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之 后, 也就是在Controller的方法调用之后执行,
* 但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操作
* 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
/**
* 该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行, 这个方法的主要作用是用于清理资源的
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
}
3.配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<!-- 表示拦截所有的url,包括子url路径 -->
<mvc:mapping path="/**" />
<!-- 拦截器不需要拦截的路径 -->
<mvc:exclude-mapping path="/static/**" />
<bean class="com.astm.ktdoor.app.interceptor.AuthorizationInterceptor" />
</mvc:interceptor>
</mvc:interceptors>