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

相关推荐
wuminyu4 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
callJJ5 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
海兰6 小时前
【第27篇】Micrometer + Zipkin
人工智能·spring boot·alibaba·spring ai
phltxy6 小时前
Spring Cloud 分布式服务部署实战:从 0 到 1 实现微服务上线
spring·spring cloud·微服务
wbs_scy6 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
海兰7 小时前
【第28篇】可观测性实战:LangFuse 方案详解
人工智能·spring boot·alibaba·spring ai
jinanwuhuaguo8 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
RuoyiOffice8 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
spring boot·后端·vue·anti-design-vue·ruoyioffice·假期·人力
xmjd msup8 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
952369 小时前
SpringBoot统一功能处理
java·spring boot·后端