首页 > 其他分享 >Spring Boot中的拦截器

Spring Boot中的拦截器

时间:2023-08-02 18:46:38浏览次数:24  
标签:LogInterceptor 拦截器 Spring Boot public response

Spring Boot中的拦截器

什么时拦截器

Spring Boot中使用拦截器在Spring Boot中,我们可以通过拦截器(Interceptor)对控制器方法的执行进行拦截,实现预处理和后处理的功能。
常见的用途有:日志记录、权限校验、性能监控等。
实现一个拦截器需要实现HandlerInterceptor接口,
该接口有三个方法:

  • preHandle():控制器方法执行前调用,如果返回true则继续执行下一个拦截器和控制器方法,如果返回false则不会继续执行。
  • postHandle():控制器方法执行后调用,在视图渲染前调用。
  • afterCompletion():整个请求结束后调用,在视图渲染后调用。

举个例子

下面是一个简单的日志拦截器例子:

public class LogInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("Request to : " + request.getRequestURI());
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("Response status : " + response.getStatus());
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("Request completed");
    }
}

要注册拦截器,需要在Spring Boot配置中注册bean并添加@InterceptorRegistry注解:

@Configuration
public class InterceptorConfig {
    @Bean
    public LogInterceptor logInterceptor() {
        return new LogInterceptor();
    }

    @InterceptorRegistry
    public void registerInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(logInterceptor());
    }
}

这样,LogInterceptor拦截器就会对所有请求进行拦截了。我们也可以通过添加路径匹配规则等来控制拦截的请求。

应用场景

常见的用法:

  • 权限控制
  • 日志记录
  • 性能监控

标签:LogInterceptor,拦截器,Spring,Boot,public,response
From: https://www.cnblogs.com/bkhb/p/17601480.html

相关文章

  • spring容器启动流程
    在创建spring容器,也就是启动spring容器时首先扫描所有要加载的bean,得到一个BeanDefinition对象,并存在一个Map中。然后筛选出非懒加载的BeanDefinition进行bean的创建。对于多例bean不需要在启动过程中创建,多例bean在使用时利用BeanDefinition去创建利用BeanDefinition去创建be......
  • 动力节点第四章OpenFeign与负载均衡-最全springcloud Alibaba学习笔记
    学习笔记视频:https://www.bilibili.com/video/BV1VW4y1o7n5本课程使用的是目前最新版本2022.0.0.0-RC2。基于SpringBoot3.0与JDK20的开发环境。课程内容涵盖了SpringCloudAlibaba所有的技术点,主要讲述包括NacosDiscovery、NacosConfig、OpenFeign、SpringCloudLoadbalance......
  • 过滤器拦截器,Interceptor+Filter 理解
    在我们springMVC项目中,一个客户端请求到达DispatcherServlet前会依次经过过滤器(Filter)和拦截器(Interceptor),所以有必要了解下过滤器和拦截器分别做了啥以及项目中该如何配置。 一.Filterpackagejavax.servlet 1.三个方法1.1init():初始化参数,在创建Filter调用,当我......
  • JAVA-Springboot实践项目-用户注册
    Smiling&Weeping----我本没喜欢的人,见你的次数多了,也就有了。1.创建数据表1.1.选中数据表:usestore1.2.创建t_user表:2创建用户实......
  • mule9.0 springappcation.xml
    <?xmlversion="1.0"encoding="UTF-8"?><mulexmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"xmlns:vm="http://www.mulesoft.org/schema/mule/vm"xmlns:db="http://www.mulesoft......
  • SpringCloudAlibaba Gateway聚合knife4j接口文档
    实现效果:Gateway服务可以查看多个服务的接口文档; knife4j依赖:<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</versio......
  • Spring内存码
    Spring内存码依然不会配环境orz,干脆直接拿以前那个java-sec-code了,springboot版本2.1.5.RELEASEspring内存码基础的有controller型和interceptor型,两个组件都可以动态添加,注入思路和以前一样,所以先看初始化的流程一、Controller型controller作用是接收特定参数,与@RequestMappi......
  • Spring中如果两个bean的id相同,会报错吗
    首先在同一个xml文件中,bean的id是唯一的不允许出现id相同的bean,否则spring启动的时候就会报错。但是在两个不同的配置文件里面,允许有相同id的bean。就会出现覆盖bean的情况。还有如果使用@Bean注解去声明一个bean,那么bean属性name相同的话,也就是声明了多个相同名字的bean,spri......
  • logback模板配置及其使用(Stringboot)
    日志模板<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanPeriod="60seconds"debug="false"><propertyname="service.name"value="xxxx"/>&l......
  • SpringBoot-2、SpringBoot打包时排除指定文件
    maven-jar-plugin,它可以配置JAR打包的细节,包括哪些文件会被包含在JAR中。以下是一个示例的配置,可以在pom.xml中添加:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin<......