zoukankan      html  css  js  c++  java
  • Spring MVC拦截器

    bean-cfg.xml文件自定义自己的拦截器

        <mvc:interceptors>
            <!--配置自定义的拦截器-->
            <bean class="com.study.interceptors.firstInterceptor"/>
        </mvc:interceptors>
    

    com.study.interceptors.firstInterceptor.java文件

    package com.study.interceptors;
    
    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 {
        /**
         * 在目标方法之前调用。
         * 若返回值为true,则继续调用后续的拦截器和目标方法
         * 若返回false,则不会再调用后续的拦截器和目标方法
         * 该方法可以考虑做权限验证,日志,事务等
         *
         * @param request  请求
         * @param response 响应
         * @param handler  视图名称或视图对象或属性
         * @return {boolean}
         * @throws Exception {String}
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("[FirstInterceptor]=>preHandle");
            return true;
        }
    
        /**
         * 调用目标方法之后,但渲染视图之前被调用
         * 该方法可以对请求域中的属性或视图做修改
         *
         * @param request      请求
         * @param response     响应
         * @param handler      自定义对象
         * @param modelAndView 含视图名称或视图对象或属性
         * @throws Exception {String}
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("[FirstInterceptor]=>postHandle");
        }
    
        /**
         * 渲染视图之后被调用,释放资源
         *
         * @param request  请求
         * @param response 响应
         * @param handler  自定义对象
         * @param ex       {string}
         * @throws Exception {string}
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("[FirstInterceptor]=>afterCompletion");
        }
    }
    
    

    拦截器执行流程

    preHandle → handle → postHandle → 视图(DispatcherServlet) → afterCompletion
    

    配置指定域拦截器

    <!--配置LocalChanceInterceptor拦截器-->
        <mvc:interceptors>
            <!--配置指定域拦截器-->
            <mvc:interceptor>
                <mvc:mapping path="/path/"/>
                <bean class="com.study.interceptors.firstInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    

    配置多个拦截器

    <!--配置LocalChanceInterceptor拦截器-->
        <mvc:interceptors>
            <bean class="com.study.interceptors.FirstInterceptor"/>
            <!--配置指定域拦截器-->
            <mvc:interceptor>
                <mvc:mapping path="/path/"/>
                <bean class="com.study.interceptors.LastInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    

    拦截器执行流程

    [FirstInterceptor]:preHandle → [LastInterceptor]:preHandle → HandlerAdapter:handle → [LastInterceptor]:postHadnle → [FirstInterceptor]:postHadnle → DispatcherServlet:render → [LastInterceptor]:afterCompletion → [FirstInterceptor]:afterCompletion
    
  • 相关阅读:
    .NET Tools...
    函数重载
    友元课后题
    怎么防止用户输入错误信息
    C#动态求圆的面积
    重载自增
    C++数学应用
    位运算符
    MSDN放出了VS2010简体中文正式版(附下载地址)
    字符串复制
  • 原文地址:https://www.cnblogs.com/MineLSG/p/13935488.html
Copyright © 2011-2022 走看看