【Spring Boot】拦截器的使用

目录

前言

拦截器的使用

1.创建一个拦截器

2.注册拦截器

3.配置拦截器的匹配规则

拦截器的实际使用场景

拦截器 vs 过滤器 vs AOP


前言

在Spring Boot中,拦截器(interceptor)是一种用于拦截和处理请求的机制。通过拦截器,可以在请求到达控制器之前,响应发送到客户端之前进行一些预处理或后处理操作

拦截器的使用

1.创建一个拦截器

要使用拦截器,首先需要创建一个实现‘HandlerInterceptor’接口的类。这个类中包含三个主要方法

  • preHandler:在请求处理之前执行。可以用于验证权限,日志记录等。
  • postHandler:在请求处理之后,视图渲染之前执行。可以用于修改‘ModelAndView’,添加一些全局的数据。
  • afterCompletion:在整个请求结束之后执行。可以用于记录日志,清理资源等。

以下是一个简单的拦截器示例:

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("开始请求辣");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info("我是请求后");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("我是请求完成");
    }
}

2.注册拦截器

创建好拦截器后,你需要将它注册到 Spring 的拦截器链中。通常在配置类中实现 WebMvcConfigurer 接口,并在其中注册拦截器。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor)
                .addPathPatterns("/api/**")    // 指定拦截路径
                .excludePathPatterns("/api/auth/**");  // 指定不拦截路径
    }
}

3.配置拦截器的匹配规则

在注册拦截器时,可以通过 addPathPatternsexcludePathPatterns 方法来配置拦截器的路径匹配规则:

  • addPathPatterns("/api/**"):拦截所有以 /api/ 开头的请求路径。
  • excludePathPatterns("/api/auth/**"):排除以 /api/auth/ 开头的路径,不进行拦截。

输出结果

拦截器的实际使用场景

拦截器可以用于多种场景,例如:

  • 认证与授权:在 preHandle 方法中验证请求是否包含有效的身份验证信息,若不合法则直接返回错误响应。
  • 日志记录:在 postHandleafterCompletion 方法中记录请求的执行情况、处理时间等日志信息。
  • 全局数据注入:在 postHandle 方法中向 ModelAndView 中添加一些全局的数据,如当前用户信息、系统时间等。

拦截器 vs 过滤器 vs AOP

  • 拦截器(Interceptor):基于 Spring MVC,主要用于拦截和处理控制器的请求,适合对请求的前后进行处理。
  • 过滤器(Filter):基于 Servlet,是更底层的机制,适用于所有的请求(包括静态资源等),常用于全局性的请求处理,如编码设置、跨域处理等。
  • AOP(面向切面编程):用于横切关注点的处理,如事务管理、日志记录等,可以在方法执行前后进行增强处理,不限于 HTTP 请求。

总结

在 Spring Boot 中,拦截器是一种非常强大的机制,用于在请求处理流程的不同阶段执行特定的逻辑。通过灵活地配置拦截器的匹配规则,你可以精确地控制拦截器的作用范围,为应用添加认证、日志、性能监控等功能。

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值