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

相关推荐
xieliyu.13 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
星辰徐哥14 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥14 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约14 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee14 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐14 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs14 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐14 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司14 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
一条小锦吕*14 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化