专栏名称: 程序员鱼皮
鹅厂全栈开发,持续分享编程技法和实用项目
目录
相关文章推荐
最爱大北京  ·  浙江警方:已介入调查该名女演员!本人最新回应 ·  12 小时前  
北京本地宝  ·  期待!北京两大老牌商场升级改造! ·  昨天  
最爱大北京  ·  北京元宵节活动,哪些公园最好玩? ·  3 天前  
三节课  ·  免费!2天掌握DeepSeek,AI时代抢先机! ·  4 天前  
人人都是产品经理  ·  聊一聊我理解的产品验收测试,都有哪些要点 ·  3 天前  
51好读  ›  专栏  ›  程序员鱼皮

今日代码大赏 | Spring Boot 拦截器

程序员鱼皮  · 公众号  ·  · 2024-05-04 17:06

正文

在构建 Web 应用程序时,我们经常需要在请求处理之前或之后执行一些通用操作,比如日志记录、权限检查、事务管理等。Spring 框架提供了拦截器(Interceptor)来实现这些功能。今天,我们将探索如何在 Spring Boot 应用程序中使用拦截器。

拦截器简介

拦截器是 AOP(面向切面编程)的一部分,它可以在方法的调用前后执行代码,甚至可以阻止方法的执行。Spring 中的拦截器与 Servlet 的过滤器(Filter)类似,但提供了更多的灵活性。

Spring Boot 中使用拦截器的步骤

1)创建拦截器 :实现 HandlerInterceptor 接口或继承 WebRequestInterceptor 抽象类。
2)配置拦截器 :在 Spring Boot 配置类中添加拦截器到 Spring 上下文中。
3)定义拦截器的路径 :通过重写 preHandle 或 postHandle 方法来定义拦截器的行为和拦截路径。

下面是使用 Spring Boot 实现拦截器的示例代码:

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 在请求处理之前执行的操作
        System.out.println("Before request handling");

        // 如果返回true,则请求继续;如果返回false,则请求终止
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        // 在请求处理之后执行的操作
        System.out.println("After request handling");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 请求完成后执行的操作
        System.out.println("After request completion");
    }
}

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**"// 拦截所有路径
                .excludePathPatterns("/css/**""/js/**"); // 排除静态资源路径
    }
}

在上述代码中,我们创建了一个 MyInterceptor 类实现了 HandlerInterceptor 接口,并重写了 preHandle、postHandle 和 afterCompletion 方法。然后,我们在 WebConfig 配置类中通过 addInterceptors 方法注册了拦截器,并定义了拦截路径。

拦截器的优点

1)解耦 :将通用操作与业务逻辑分离,提高代码的可维护性。
2)灵活性 :可以灵活地控制请求处理的流程。

拦截器的缺点

1)复杂性 :过多的拦截器可能会使请求处理流程变得复杂。
2)性能 :如果不当使用,可能会影响应用程序的性能。

拦截器是 Spring 框架中一个非常有用的组件,它可以帮助我们实现请求处理前后的通用操作。

今天的代码大赏就到这里。希望通过这篇文章,你能够对 Spring Boot 如何自定义一个拦截器有一个更深入的理解。

完整代码片段 来源于代码小抄,欢迎点击进入小程序阅读!

在线访问:https://www.codecopy.cn/post/3qd8sp

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

这个爱心代码,极客范十足~







请到「今天看啥」查看全文