You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中忽略特定路由JWT校验的实现方案合理性及业界常用实践咨询

Spring Boot中忽略特定路由JWT校验的实现方案合理性及业界常用实践咨询

你好呀!作为经常和Spring Boot安全模块打交道的开发者,我来聊聊你的实现方案和业界常用的做法~

你的现有方案分析

你现在同时用了两种方式来跳过JWT校验:一是在SecurityFilterChain里给/auth/**和/welcome设置permitAll,二是在JwtAuthenticationFilter里重写shouldNotFilter方法跳过这些路径。这个方案是可以正常工作的,但存在一点冗余——这两种操作本质上都是在做“跳过JWT校验”的事情,属于重复配置。

业界常用的实践方案

1. 仅通过SecurityFilterChain配置(推荐)

这是Spring Security最标准的做法:直接在安全配置类里通过permitAll()开放不需要认证的路径,剩下的路径统一要求认证。这样做的好处是:

  • 安全规则集中管理,逻辑更清晰,后续维护权限时不用同时修改配置和过滤器代码
  • Spring Security的过滤器链会自动跳过这些开放路径的认证流程,你的JWT过滤器根本不会被触发到这些请求,不需要额外在过滤器里处理跳过逻辑

你可以把代码简化成这样:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
                .csrf(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests(
                        authorizeHttp -> {
                            authorizeHttp.requestMatchers("/auth/**", "/welcome").permitAll();
                            authorizeHttp.anyRequest().authenticated();
                        }
                )
                .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
                .build();
    }
}

同时去掉过滤器里重写的shouldNotFilter方法即可。

2. 通过过滤器的shouldNotFilter控制(适合特殊场景)

如果你的业务场景需要:某些路径虽然不需要JWT校验,但要走这个过滤器里的其他逻辑(比如日志记录、公共参数校验),那重写shouldNotFilter是合理的。但这种场景比较少见,大部分开放路径(比如登录、注册、公开欢迎页)根本不需要经过JWT过滤器,所以没必要用这种方式。

3. 过滤器URL模式匹配(较少用)

你也可以通过@WebFilter注解指定过滤器的匹配路径,比如只让JWT过滤器匹配/**排除/auth/**和/welcome,但这种方式不如Security配置灵活——Spring Security的配置可以整合角色权限、CSRF控制等更多安全规则,更适合统一管理。

总结

你的现有方案能正常工作,但存在冗余问题。业界最常用的是仅通过SecurityFilterChain的permitAll配置来开放不需要JWT校验的路径,这样代码更简洁,也符合Spring Security的设计思路。

备注:内容来源于stack exchange,提问作者Thanh Dương Phan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:14:33