zoukankan      html  css  js  c++  java
  • 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
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Source Maps简介
    JavaScript数据结构——图的实现
    JavaScript数据结构——树的实现
    JavaScript数据结构——字典和散列表的实现
    JavaScript数据结构——集合的实现与应用
    [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
    安卓刷量技术揭秘
    【转】让Bootstrap 3兼容IE8浏览器
    [LINK]Python服务器开发一:python基础
    [LINK]用Python计算昨天、今天和明天的日期时间
  • 原文地址:https://www.cnblogs.com/binbingg/p/13820013.html
Copyright © 2011-2022 走看看