SpringBoot拦截器

简介

拦截器可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能。

使用步骤

在SpringBoot中使用拦截器功能通常需要以下3步:

  1. 定义拦截器
  2. 注册拦截器
  3. 指定拦截规则

定义拦截器

在SpringBoot中定义拦截十分简单,只需要定义一个拦截类,并实现HandlerInterceptor接口,如下:

@Component
public class RequestInterceptor implements HandlerInterceptor {

    /**
     * 目标方法执行前
     * 该方法在控制器处理请求方法前执行,其返回值表示是否中断后续操作
     * 返回true 表示继续向下执行,返回false 表示中断后续操作
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("这是在到达Controller请求前");
        return true;
    }

    /**
     * 目标方法执行后
     * 该方法在控制器处理诅求方法调用之后,解析视图之前执行
     * 可以通过此方法对请求域中的模型和视图做进一步修改
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("目标方法执行后");
    }

    /**
     * 页面渲染后
     * 该方法在视图渲染结束后执行
     * 可以通过此方法实现资源清理,记录日志信息等工作
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("完成页面渲染后");
    }
}

注册拦截器

创建一个实现了 WebMvcConfigurer 接口的配置类(使用了 @Configuration 注解的类),重写 addInterceptors() 方法,并在该方法中调用 registry.addInterceptor() 方法将自定义的拦截器注册到容器中。

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestInterceptor());
    }
}

指定拦截规则

修改 MyMvcConfig 配置类中 addInterceptors() 方法的代码,继续指定拦截器的拦截规则,代码如下。

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestInterceptor())
                .addPathPatterns("/**")  //拦截所有请求,包括静态资源文件
                .excludePathPatterns("/", "/login", "index.html", "/css/**", "images/**", "/js/**");  // 放行靜态资源
    }
}

至此,拦截器的基本功能已经完成。

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/617

Previous 2023年4月29日
Next 2023年4月30日

相关推荐

  • SpringBoot 整合Log4j2日志框架

    简介 Apache Log4j 2是日志框架Log4j的升级,它比其前身Log4j 1.x提供了重要的改进, 并且参考了Logback中许多有用的改进,同时修复了Logback的一…

    springboot 2023年3月26日
    154
  • springboot 注解 @Qualifier

    作用 可以在依赖注入查找候选者的过程中对候选者进行过滤,比如:在需要自动注入java bean时,如果注入的是一个接口,而这个接口又有多个实现类,则会报错,解决方法是在注入接口上增…

    springboot 2022年9月14日
    199
  • Springboot 注解 @Configuration

    作用 @Configuration用于定义配置类,标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的beans。@Configurat…

    springboot 2022年9月2日
    224
  • SpringBoot 整合Redis

    添加依赖 在pom.xml文件添加redis的依赖,如下: 配置 在application.yml文件中添加Redis相关的配置项,如下所示: 案例 1、字符串元素 2、List元…

    springboot 2023年3月26日
    122
  • SpringBoot 全局异常统一处理

    前言 在实际的项目开发过程中,会有大量的异常发生,而我们并不能将异常信息反馈到用户,所以在返回结果的时候需要对异常进行处理,可是如果在每个Controller返回结果都需要进行异常…

    springboot 2023年4月29日
    126
  • SpringBoot 过滤器

    简介 SpringBoot过滤器在web开发中可以过滤指定的URL,比如拦截掉不需要的接口请求,同时也可以对request和response的内容进行修改。 使用场景 Spring…

    springboot 2023年4月30日
    242
  • SpringBoot CRUD基础开发 入门

    需求简介 环境准备 1、新建项目 新建一个crud的项目,如下: 2、新建数据库脚本 新建curd数据库 初始化数据库 引入依赖 1、引入web依赖 2、引入Lombok依赖 3、…

    2023年3月26日
    179
  • SpringBoot自定义注解与使用

    简介 注解是一种能添加到Java代码中的元数据,方法,类,参数与包都可以使用注解进行修饰,可以将注解看为一种特殊的标记,在Java编译或运行过程中将有这种特殊标记的部分进行特殊处理…

    springboot 2024年1月25日
    255
  • SpringBoot 整合Mybatis

    简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBat…

    2024年8月28日
    309
  • SpringBoot Spring Event 业务解耦神器

    介绍 Spring Event是Spring框架中的一个事件机制,主要用于实现应用程序内部的事件传递与处理,它允许不同组件之间通过发布-订阅机制进行解耦通信,比如用户注册,订单创建…

    springboot 2024年1月11日
    301