Spring/SpringBoot 拦截器

Spring/SpringBoot 拦截器

拦截器的作用:

拦截器,可以进行请求过滤、权限管理、打印日志、数据校验等。

拦截器,可以在请求前、请求后进行处理。

代码示例:

  • 拦截器 MyInterceptor:

Spring的拦截器,需要实现 HandlerInterceptor 接口。

public class MyInterceptor implements HandlerInterceptor {

    /**
     * 前置拦截. 如果返回 false,就不会调用 url 请求
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String requestUri = request.getRequestURI();
        System.out.println("MyInterceptor preHandle: " + requestUri);
        //如果请求以指定字符串开头,就进行拦截。注意不要漏掉第一个/
        if (requestUri.startsWith("/test/interceptor")) {
            //如果返回 false,就不会调用 url 请求
            return false;
        }

        return true;
    }

    /**
     * 后置拦截
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("MyInterceptor postHandle: " + request.getRequestURI());
    }

    /**
     * 返回给前端渲染后执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("MyInterceptor afterCompletion: " + request.getRequestURI());
    }
}
  • 配置拦截器:

配置拦截器,需要实现 WebMvcConfigurer 接口,通过 addInterceptor 添加拦截器。

可以多次调用 addInterceptor,支持添加多个拦截器。

还可以通过 addPathPatterns 匹配请求的url,excludePathPatterns 排除特定的 url。

@Configuration
@Slf4j
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        log.info("WebMvcConfig addInterceptors registry.");
        //通过  addPathPatterns 匹配请求的url,excludePathPatterns 排除特定的 url
        registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**").excludePathPatterns("/login", "/register");
        //addInterceptor,支持添加多个拦截器。
        registry.addInterceptor(new MyInterceptor2());


    }
}

参考资料:

https://blog.csdn.net/heihaozi/article/details/131428958

相关推荐
陈大爷(有低保)2 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu15 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
哈喽,树先生22 分钟前
1.Seata 1.5.2 seata-server搭建
spring·springcloud
王哲晓36 分钟前
Linux通过yum安装Docker
java·linux·docker
java66666888841 分钟前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存42 分钟前
源码分析:LinkedList
java·开发语言
执键行天涯42 分钟前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool1 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言