首页 > 代码库 > SpringMVC经典系列-14自定义SpringMVC的拦截器---【LinusZhu】
SpringMVC经典系列-14自定义SpringMVC的拦截器---【LinusZhu】
注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linuszhu@163.com,敬请朋友们斧正,谢谢。
这部分主要讲解SpringMVC的拦截器的部分,会带着大家完成定义拦截器的两种方式的实例,不多说了,开始……
SpringMVC的拦截器主要是用于拦截用户的请求,并且进行相应的处理,如:权限验证、判断登录等。
定义拦截器的两种方式,如下:
1. 实现接口:
org.springframework.web.servlet.HandlerInterceptor
接口中有如下方法需要重写:
注意:参数中的Object handler是下一个拦截器。
a) public boolean preHandle
(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
该方法在action执行前执行,可以实现对数据的预处理,比如:编码、安全控制等。
如果方法返回true,则继续执行action。
b) public void postHandle
(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception
该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
c) public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception
最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。因为我们在平时处理异常时,都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。
2. 继承适配器类:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
这个适配器实现了HandlerInterceptor接口。提供了这个接口中所有方法的空实现。
下面是我定义的两中实现拦截器的示例代码,仅供大家参考:
//方式1 package 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("zxs-最后执行!!!一般用于释放资源!!"); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("zxs-Action执行之后,生成视图之前执行!!"); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("zxs-action之前执行!!!"); return true; // 继续执行action } } |
//方式2 package interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class MyInterceptor2 extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor2.preHandle()"); return true; // 继续执行action } } |
3. springmvc-servlet.xml中如何添加如下配置,使用拦截器:
<mvc:interceptors> <!-- 拦截器1会拦截所有.do请求 --> <bean class="interceptor.MyInterceptor"></bean> <!-- 拦截器2会拦截user.do请求 --> <mvc:interceptor> <mvc:mapping path="/user.do" /> <bean class="interceptor.MyInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors> |