美文网首页JAVA程序员
SpringMVC拦截器的使用

SpringMVC拦截器的使用

作者: 刺風 | 来源:发表于2017-08-22 22:18 被阅读42次
一、修改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。

  1. 直接实现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
         }
     }
    
  2. 继承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;
         }
    
     }
    

相关文章

网友评论

    本文标题:SpringMVC拦截器的使用

    本文链接:https://www.haomeiwen.com/subject/bqrrdxtx.html