springMVC(七)——拦截器
springmvc拦截器
拦截器(拦截都是控制层的地址。 filter: )
1、创建一个类 实现接口 HandlerInterceptor并重写接口的中方法
package com.zhiyou100.zjc.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.zhiyou100.zjc.bean.User; public class UserInterceptor implements HandlerInterceptor{ /* * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。该方法将在整个请求完成之后, * 也就是DispatcherServlet渲染了视图执行, * 这个方法的主要作用是用于清理资源的,当然这个方法也只能在当前这个Interceptor的preHandle方法的返回值为true时才会执行。 */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub System.out.println("afterCompletion方法执行了"); } /* * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。postHandle是进行处理器拦截用的, * 它的执行时间是在处理器进行处理之 后,也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行, * 也就是说在这个方法中你可以对ModelAndView进行操作。这个方法的链式结构跟正常访问的方向是相反的, * 也就是说先声明的Interceptor拦截器该方法反而会后调用, */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub System.out.println("postHandle方法执行了"); } /* * preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用, * SpringMVC中的Interceptor拦截器是链式的,可以同时存在 * 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在 * Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的,这种中断方式是令preHandle的返 * 回值为false,当preHandle的返回值为false的时候整个请求就结束了。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { // TODO Auto-generated method stub System.out.println("preHandle拦截器拦截了"); return true; } }
2、配置拦截器
<!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 --> <mvc:interceptors> <mvc:interceptor> <!-- 拦截的目录 **代表多层目录 --> <mvc:mapping path="/父目录名/**"/> <!-- 不拦截的 可以有多个--> <mvc:exclude-mapping path="/user/logins"/> <mvc:exclude-mapping path="/user/denglu"/> <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> <bean class="com.zhiyou100.zjc.interceptor.UserInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>