在Spring Boot中注册过滤器几种方式

1. 使用@WebFilter注解(适用于Servlet API项目)

import jakarta.servlet.annotation.WebFilter;

@WebFilter(urlPatterns = "/*") // 拦截所有请求
public class TokenFilter implements Filter {
   
    // 实现doFilter方法,添加过滤逻辑
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
   
        // ... 过滤器逻辑
        chain.doFilter(request, response);
    }

    // 其他生命周期方法如init和destroy...
}

2. 使用Spring的FilterRegistrationBean(推荐)

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
   
    @Bean
    public FilterRegistrationBean<TokenFilter> tokenFilterRegistration() {
   
        FilterRegistrationBean<TokenFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new TokenFilter());
        // 设置拦截规则
        registration.addUrlPatterns("/*"); // 拦截所有请求
        // 可以设置过滤器名称、初始化参数等
        registration.setName("tokenFilter");
        // 设置过滤器执行顺序,默认为0,数值越小优先级越高
        registration.setOrder(1);
        return registration;
    }
}

// TokenFilter类实现javax.servlet.Filter接口
public class TokenFilter implements Filter {
   
    // ...
}

3. 如果过滤器是Spring Bean,可以通过继承GenericFilterBean

import org.springframework.web.filter.GenericFilterBean;

public class TokenFilter extends GenericFilterBean {
   
    // 实现doFilterInternal方法替代doFilter方法
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
   
        // ... 过滤器逻辑
        chain.doFilter(request, response);
    }
}

// 注册到Spring容器中
@Configuration
public class FilterConfig {
   

    @Bean
    public TokenFilter tokenFilter() {
   
        return new TokenFilter();
    }

    // 若需指定URL模式或排序,同样可以使用FilterRegistrationBean
    @Bean
    public FilterRegistrationBean<TokenFilter> tokenFilterRegistration(TokenFilter tokenFilter) {
   
        FilterRegistrationBean<TokenFilter> registration = new FilterRegistrationBean<>(tokenFilter);
        registration.addUrlPatterns("/*");
        registration.setOrder(1);
        return registration;
    }
}

相关推荐

  1. Spring Boot注册过滤器方式

    2024-01-18 09:18:04       59 阅读
  2. asp.net core 自定义过滤器 注入方式和实现

    2024-01-18 09:18:04       35 阅读
  3. Qt 暂停程序的方法

    2024-01-18 09:18:04       25 阅读
  4. 无人机应急救援应急方案

    2024-01-18 09:18:04       22 阅读
  5. SpringBoot实现跨域的常用方式

    2024-01-18 09:18:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 09:18:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 09:18:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 09:18:04       87 阅读
  4. Python语言-面向对象

    2024-01-18 09:18:04       96 阅读

热门阅读

  1. HTTP API 认证技术详解(四):HMAC Authentication

    2024-01-18 09:18:04       46 阅读
  2. c语言复习:常见函数与错误

    2024-01-18 09:18:04       51 阅读
  3. 算法专题:差分数组

    2024-01-18 09:18:04       54 阅读
  4. Android在系统界面上添加窗口

    2024-01-18 09:18:04       54 阅读
  5. 【低危】OpenSSL 拒绝服务漏洞

    2024-01-18 09:18:04       52 阅读