Spring自定义Filter未生效求助:JWT实现遇阻
Spring JWT过滤器未生效的排查与解决
以下是针对过滤器未生效问题的具体排查步骤和解决方案:
1. 确保过滤器被Spring容器扫描到
- 检查
Filtro类所在的包是否在Spring Boot主启动类的@ComponentScan扫描范围内。主启动类默认扫描自身所在包及其子包,若过滤器在外部包,需手动指定扫描路径。
2. 修复doFilter方法的逻辑
当前代码未调用chain.doFilter(request, response),即便过滤器生效,请求也无法传递到后续控制器。同时确保日志代码正确:
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { log.info("ENTRY::-> doFilter"); // 必须调用此方法,保证请求继续流转 chain.doFilter(request, response); }
3. 显式配置拦截路径
仅依赖@Component可能因环境差异导致拦截路径不生效,推荐以下两种方式明确配置:
方式一:使用@WebFilter + @ServletComponentScan
在过滤器类上添加@WebFilter指定拦截路径,主启动类添加@ServletComponentScan开启Servlet组件扫描:
@Slf4j @WebFilter(urlPatterns = "/*") public class Filtro implements Filter { // 实现方法 } // 主启动类 @SpringBootApplication @ServletComponentScan public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
方式二:通过配置类手动注册过滤器
创建配置类,明确指定过滤器的拦截路径和优先级:
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean<Filtro> filtroRegistrationBean() { FilterRegistrationBean<Filtro> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new Filtro()); // 拦截所有请求 registrationBean.addUrlPatterns("/*"); // 设置优先级,数字越小优先级越高 registrationBean.setOrder(1); return registrationBean; } }
此方式无需在过滤器类上添加@Component,避免自动扫描的不确定性。
4. 检查日志级别配置
确保日志配置中开启了INFO级别输出,例如在application.yml中:
logging: level: com.yourpackage: INFO # 替换为Filtro类所在的包路径
若日志级别设为WARN或ERROR,log.info的内容将不会输出。
5. 处理Spring Security冲突(若使用)
如果项目集成了Spring Security,自定义过滤器需加入SecurityFilterChain才能生效,否则请求会被Security的过滤器优先拦截:
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) // 将自定义过滤器添加到UsernamePasswordAuthenticationFilter之前 .addFilterBefore(new Filtro(), UsernamePasswordAuthenticationFilter.class); return http.build(); } }
内容的提问来源于stack exchange,提问作者Manuel Quintero
相关产品推荐
相关产品推荐

