• JavaEE——SpringMVC(11)--拦截器


    自定义的拦截器必须实现HandlerInterceptor接口

    – preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对
    请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件
    去处理请求,则返回false。 

      * 该方法在目标方法之前被调用.
      * 若返回值为 true, 则继续调用后续的拦截器和目标方法.
      * 若返回值为 false, 则不会再调用后续的拦截器和目标方法.
      * 可以考虑做权限. 日志, 事务等.

    – postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet 向客户端返回响应前被调用,在该方法中对
    用户请求request进行处理。

      * 调用目标方法之后, 但渲染视图之前. 
      * 可以对请求域中的属性或视图做出修改.
    – afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。

      * 渲染视图之后被调用. 释放资源

     springmvc.xml

    <mvc:interceptors>
            <!--配置自定义的拦截器-->
            <bean class="interceptor.FirstInterceptor"></bean>
            
            <mvc:interceptor>
                <mvc:mapping path="/emps"/>
                <bean class="interceptor.SecondInterceptor"></bean>
            </mvc:interceptor>
            
            <!--<!–配置LocaleChangeInterceptor–>
            <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>-->
        </mvc:interceptors>
    

      

    FirstInterceptor

    package interceptor;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class FirstInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
            System.out.println("FirstInterceptor preHandle");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
            System.out.println("FirstInterceptor postHandle");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
            System.out.println("FirstInterceptor afterCompletion");
        }
    }
    

      

    有两个拦截器时的执行顺序:

    当第二个拦截器返回false时

     

  • 相关阅读:
    PHP设计模式——迭代模式
    采用navicat导出表结构及数据insert声明
    [Angular] Protect The Session Id with https and http only
    [D3] Creating a D3 Force Layout in React
    [D3] Animate Chart Axis Transitions in D3 v4
    [D3] Animate with the General Update Pattern in D3 v4
    [Web Security] JSON Hijacking
    [Angular] Progress HTTP Events with 'HttpRequest'
    [RxJS] How To get the results of two HTTP requests made in sequence
    [RxJS] Avoid mulit post requests by using shareReplay()
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8410493.html
Copyright © 2020-2023  润新知