SpringMVC可以是用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor。
preHandle:这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求Request进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去处进行处理,则返回true,如果决定不需要再调用其他的组件去处理请求,则返回false。(目标方法调用之前,可以做权限验证,日志,事务等)
postHandle:这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回相应前被调用,在该方法中对用户请求Request进行处理。(调用目标方法后,渲染视图之前,可以对请求域中的属性或视图做出修改)
afterCompletion:这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。(渲染视图之后,可以做资源释放)
1、创建自定义拦截器,实现相应的功能
2、在SpringMVC配置文件中配置该拦截器
<mvc:interceptors>
<bean class="自定义拦截器全类名"></bean>
</mvc:interceptors>
如果使用上述的配置则会对所有的目标方法生效,可以使用以下精确配置
<!-- 指定拦截器作用的路径,例如只针对/emps的访问才进行拦截 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/emps"/>
<bean class="自定义拦截器全类名"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:exclude-mapping path=""/>与之相反,表示排除相应的路径。
对于多个拦截器的执行顺序