zoukankan      html  css  js  c++  java
  • 初学springMVC的拦截器

    springMvc拦截器的执行顺序!

    拦截器的各个方法的作用:

    
    

         /** * 登录验证拦截器 */

         public class Intercepter implements HandlerInterceptor {

        /*

         * 执行时机:视图已经被解析完毕,类似try catch 后的finally,追踪错误
         */
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception {
    
        }
    
        /**
         * 执行时机:controller执行完,视图解析器没有把视图解析成页面,
         * 对视图做统一的修改,主要体现在Model上,可以追加数据  
         */
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception {
          Map<String,Object> map=mv.getModel();
          map.put("test","append something"); }
    /** * 执行时机:在执行controller之前来执行 * 返回值类型:boolean:true代表放行可以访问controller,false不可以访问controller */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { return false; } }

    写了两个拦截器,配置如下:

    <!-- 配置拦截器 -->  
        <mvc:interceptors>  
          <!-- 多个拦截器,顺序执行   -->
          <mvc:interceptor>  
              <mvc:mapping path="/**"/><!-- 表示所有的url,包括子url路径 --><!-- 某一模块的拦截:/myPath/**, 拦截所有的请求/**-->
                  <bean class="com.interceptors.EncodingInterceptor"></bean>  
          </mvc:interceptor>  
          <!--配置登陆拦截器   -->
              <mvc:interceptor>  
                  <mvc:mapping path="/**"/>  
                      <bean class="com.interceptors.LoginHandlerIntercepter"></bean>  
              </mvc:interceptor>  
        </mvc:interceptors>  

    没写什么逻辑,就打印了log,LoginHandlerIntercepter中的log是01

    结果简略如下:

    preHandle.........
    preHandle01.........
    ...
    ...
    ...
    postHandle01.........
    postHandle.........
    ...
    ...
    ...
    afterCompletion01.........
    afterCompletion.........

    可以看出,按照拦截器的配置顺序先执行了字符拦截器,后执行了登录验证的拦截器;

    但是:preHandler是按照拦截器的配置顺序执行的,而postHandler和afterCompletion是按照拦截器的配置顺序的倒序执行的

    所以 :
             如果统一日志处理器拦截器,需要改拦截器prehandler一定要返回true,且将它放在拦截器配置的第一个位置;
             如果登陆认证拦截器,放在拦截器的配置中的第一个位置(有日志处理的话,放在日志处理下面);
             如果有权限校验拦截器,则放在登陆拦截器之后,因为登陆通过后,才可以进行校验权限;

     暂且记录这些。。。。

  • 相关阅读:
    C# post请求 HttpWebRequest
    C# 获取当前路径
    计算n的阶乘
    查找2-n之间素数的个数
    循环嵌套-打印不定长特殊*号图形
    流程控制-物流费用计算(嵌套if)
    基于Arduino的按键控制LED实验
    基于Arduino的红外遥控
    PS/2的相关知识
    Arduino_URO端口与AtMega328p引脚对应图
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/7605493.html
Copyright © 2011-2022 走看看