springMVC相关—自定义拦截器

Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必 须实现HandlerInterceptor接口
    1.自定义实现类实现 HandlerInterceptor接口  

 1 public class MyInterceptor implements HandlerInterceptor{
 2 
 3     @Override
 4     public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
 5         
 6         
 7         System.out.println("执行了preHandle");
 8         return true;
 9     }
10     
11     @Override
12     public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
13             throws Exception {
14         
15         System.out.println("执行了postHandle");
16     }    
17     
18     @Override
19     public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
20             throws Exception {
21         
22         System.out.println("执行了afterCompletion");
23     }    
24 }
拦截器初始文件

    2.在springmvc配置文件中配置相对应的拦截器
        <mvc:interceptors>
            <!--配置自定义拦截器 ,所有的路径都拦截 -->
            <bean class="com.neuedu.springmvc.filter.MyFilter"></bean>
        </mvc:interceptors>
    
    –    preHandle():该方法在目标方法之前被调用,
                    若返回值为true,则继续调用后续的拦截器和目标方法
                    若返回值为false,则不会再调用后续的拦截器和目标方法
                    
                    可以考虑做权限,日志或者事务等!
                    
    –    postHandle():调用目标方法之后,但渲染视图之前被调用
                
                     可以对请求域中的属性或者视图做出修改!
   
    –    afterCompletion():渲染视图之后被调用,
                       
                      可以在该方法中进行一些资源清理的操作。
                                        
 关于拦截器的配置:

 1  <mvc:interceptors>
 2             <!--配置自定义拦截器 ,所有的路径都拦截 -->
 3             <bean class="com.neuedu.springmvc.filter.MyFilter"></bean>
 4             <!-- 关于拦截器的配置问题 ,可以通过<mvc:interceptor>来配置使用哪个拦截器来【不】拦截的路径-->
 5             <mvc:interceptor>
 6                 <!-- 用<mvc:mapping>标签指定要拦截的路径 -->
 7                 <mvc:mapping path="/employ"/>
 8                 <!-- 指定使用哪个拦截器进行拦截 -->
 9                 <bean class="com.neuedu.springmvc.filter.SecondFilter"></bean>
10             </mvc:interceptor>
11         </mvc:interceptors>
拦截器配置

  1.class中为拦截器类的全类名,上述配置的结果是:拦截器MyFilter拦截所有路径,拦截器SecondFilter仅拦截path处指定的路径,即/employ

  2.拦截器有执行顺序,在配置中越靠上的,拦截器的优先级越高。  3.

1、配置指定拦截的路径:
    <mvc:mapping path="/employ"/>
2、配置指定不拦截的路径:
    <mvc:exclude-mapping path="/testException"/>

注意:指定不拦截的路径时:
    要将指定的拦截路径一同写上,且必须以如下形式书写(拦截路径写在不拦截路径之上):
                        <mvc:mapping path="/emp"/>
		 	<mvc:exclude-mapping path="/testException"/>  
( <mvc:mapping path="/emp"/>若在下面或不写,均会报错)      

   4.多拦截器执行流程:

  以上面配置为例(假设结果均为true):

  【MyFilter】preHandle——>【SecondFilter】preHandle——>目标方法——>【SecondFilter】postHandle

  ——>【MyFilter】postHandle——>视图渲染(把jsp页面标签一类的翻译为HTML的过程,将jsp中EL中的数据放到  HTML中)——>【SecondFilter】afterCompletion——>【MyFilter】afterCompletion

注意:
    filter使用与interceptor类似,不过filter将配置文件写在web.xml;而interceptor是将文件配置在springmvc.xml中。。。

  两者均常用在鉴定筛选信息。

原文地址:https://www.cnblogs.com/kangxingyue-210/p/7424823.html