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 属性用于设置拦截器可以拦截的请求,而且支持 /* 通配符,表示拦截所有请求。

拦截器的使用场景

  • 日志记录

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

  • 权限管理

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

  • 性能监控

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

  • 加/解密码

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

posted @ 2020-10-15 13:16  Binge-和时间做朋友  阅读(228)  评论(0)    收藏  举报