• SpringMVC 拦截器


    引言

    SpringMVC 的拦截器特性类似于过滤器,用于页面控制器/处理器进行的预处理和后处理

    拦截器的使用步骤

    自定义拦截器类
    package com.dt.interceptor;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author Binge
     * @desc 拦截器类
     * @date 2020/10/15 上午11:28
     */
    public class MyInterceptor extends HandlerInterceptorAdapter {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("拦截点1");
            return true; //返回值 true:请求通过   false:请求被拦截
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("拦截点2");
            super.postHandle(request, response, handler, modelAndView);
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("拦截点3");
            super.afterCompletion(request, response, handler, ex);
        }
    }
    
    

    以上代码可以看到,定义一个拦截器类有三个拦截方法(拦截点),其中 preHandle 拦截方法与其他两个有一点不同,就是这个方法有返回值,可以提前将请求拦截,让页面控制器无法收到请求。

    SpringMVC 添加拦截器配置
    <mvc:interceptors>
            <mvc:interceptor>
                <!--配置拦截器拦截的请求路径-->
                <mvc:mapping path="/comment"/>
                <!--配置拦截器类的路径-->
                <bean class="com.dt.interceptor.MyInterceptor" />
            </mvc:interceptor>
        </mvc:interceptors>
    

    以上配置中,path 属性用于设置拦截器可以拦截的请求,而且支持 /* 通配符,表示拦截所有请求。

    拦截器的使用场景

    • 日志记录

    记录请求信息的日志,以便进行信息监控、信息统计以及页面浏览次数等

    • 权限管理

    检测登录权限,如果没有登录直接返回到登录或注册页面

    • 性能监控

    可以通过拦截器在进入页面控制器之前记录开始时间,在处理完记录结束时间,从而得到该请求的处理时长

    • 加/解密码

    可以通过拦截器对密码进行加/解密

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    博客园的使用和设置
    关于递推算法求解约瑟夫环问题P(n,m,k,s)
    HTML超链接和路径
    HTML文本元素标签
    HTML前序
    Java正则表达式验证至少6位表达式中至少包含数字大小写字母中的一种
    创建自己的第一个Vue项目
    查看端口及进程
    Java读取数据库(Oracle,MySQL,PostgresSQL)表信息以及字段信息生成Word文档
    启动项目报错ORA-12505, TNS:listener does not currently know of SID given in
  • 原文地址:https://www.cnblogs.com/binbingg/p/13820013.html
Copyright © 2020-2023  润新知