• 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中。。。

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

  • 相关阅读:
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    一份完整的 Java 成神路线图,值得收藏!
    12 岁开始学编程,17 岁总结了 7 个重要教训!
    想成为顶尖 Java 程序员?先过了下面这些问题!
    Dubbo面试20问!这些题你都遇到过吗?
    yum安装出现No package crontabs available解决办法
    表结构设计方法
    后端token认证模板
    vue 用户登录 路由拦截 vuex cookie
    pyharm无法安装包的问题
  • 原文地址:https://www.cnblogs.com/kangxingyue-210/p/7424823.html
Copyright © 2020-2023  润新知