Spring Boot中过滤器

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)指定顺序。值小的先执行。

posted @ 2023-08-02 18:28  冰块好冰  阅读(254)  评论(0)    收藏  举报