首页 > 其他分享 >Spring Boot中过滤器

Spring Boot中过滤器

时间:2023-08-02 18:47:08浏览次数:34  
标签:请求 Spring Boot Filter spring 过滤器 Servlet public

Spring Boot中过滤器

过滤器是什么

Filter也称之为过滤器,过滤器是对数据进行过滤,预处理。开发人员可以对客户端提交的数据进行过滤处理,比如敏感词,也可以对服务端返回的数据进行处理。还有就是可以验证用户的登录情况,权限验证,对静态资源进行访问控制,没有登录或者是没有权限时是不能让用户直接访问这些资源的。类似的过滤器还有很多的功能,比如说编码,压缩服务端给客户端返回的各种数据,等等。

简而言之,过滤器是一种轻量级的拦截器,基于Servlet规范,能够拦截请求和响应,在进入Servlet之前或之后进行额外处理。

过滤器的生命周期

定义过滤器需要实现javax.servlet.Filter接口
该接口定义了过滤器的3个生命周期方法:
 - init():初始化方法,用于初始化过滤器
 - doFilter():实际执行过滤逻辑的方法,每次请求到达时调用
 - destroy():销毁方法,用于释放资源

它主要用于:

  • 预处理请求:在请求到达 Servlet 之前进行拦截和处理,例如校验Token、密钥等
  • 后处理响应:在 Servlet 处理完请求后进行额外处理,例如日志记录等
  • 处理 OPTIONS 请求:实现 CORS 跨域支持

案例

编写过滤器

public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        // 实现过滤逻辑
        chain.doFilter(request, response); //将请求传递给下一个过滤器或servlet
    }

    @Override
    public void destroy() {
        
    }
}

注册到spring boot中,有两种方法:

  1. 通过@Filter注解:
@Filter
public class MyFilter implements Filter {}

这种方式下,过滤器会默认映射到/*,拦截所有的请求
2. 在spring.factories文件中注册:
在resources/META-INF/spring.factories添加:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyFilter

这种方式需要手动配置过滤器的映射路径和排除路径。在application.properties中添加:

myfilter.filter.paths=/hello
myfilter.filter.exclude-paths=/ignore

过滤器的执行顺序取决于它在spring.factories文件中的注册顺序,除非通过@Order(n)指定顺序。值小的先执行。

标签:请求,Spring,Boot,Filter,spring,过滤器,Servlet,public
From: https://www.cnblogs.com/bkhb/p/17601476.html

相关文章

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