一、修改SpringMVC配置文件:
<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- 放在外面拦截所有springmvc的url -->
<bean class="cfs.admin.interceptor.MyInterceptor" />
<mvc:interceptor>
<mvc:mapping path="/*/test*" />
<bean class="cfs.admin.interceptor.TestInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
通过上面配置信息,可以看到如果直接在<mvc:interceptors>
下面写一个bean
那么这个拦截器就称为全局拦截器,可以拦截所有的url,
如果想对指定的url去进行拦截可通过<mvc:interceptor>
和<mvc:mapping path=“想要拦截的url”
标签来去控制。
二、实现对应的拦截器类
有两种实现方式可供选择:
一种是直接实现HandlerInterceptor
接口;
一种实现方式是通过继承HandlerInterceptorAdapter
这个抽象类,其实本质上这个抽象类是去实现了AsyncHandlerInterceptor
接口,然而AsyncHandlerInterceptor
接口直接继承了HandlerInterceptor
,并新添了afterConcurrentHandlingStarted()
方法用于处理异步请求,当Controller中有异步请求方法的时候会触发该方法时,异步请求先支持preHandle、然后执行afterConcurrentHandlingStarted。异步线程完成之后执行。preHandle、postHandle、afterCompletion。
-
直接实现
HandlerInterceptor
接口:package cfs.admin.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("最后执行!!!一般用于释放资源!!"); } @Override public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Action执行之后,生成视图之前执行!!"); } @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception { System.out.println("action之前执行!!!"); return true; //继续执行action } }
-
继承
HandlerInterceptorAdapter
抽象类:package cfs.admin.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class TestInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //这种方式用那个方法直接重写即可不必全部实现 System.out.println("TestInterceptor.preHandle()"); return true; } }
网友评论