Spring Security安全策略更新踩坑记录
最近在项目中遇到Spring Security安全策略更新的问题,特来分享一下踩坑经历。
问题背景
在升级Spring Security版本后,发现原有的认证策略突然失效。经过排查,发现问题出在SecurityFilterChain配置上。
复现步骤
- 首先检查当前Spring Security版本:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.7.0</version>
</dependency>
- 配置文件中的安全策略:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(withDefaults())
.httpBasic(withDefaults());
return http.build();
}
- 问题现象:访问
/admin/dashboard接口时返回403 Forbidden,但预期应该能正常访问。
解决方案
最终通过以下方式解决:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/public/**").permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.permitAll()
)
.logout(logout -> logout.permitAll());
return http.build();
}
关键点提醒
- Spring Security 5.7+版本对配置方式做了调整
- 建议使用
hasRole()而不是hasAuthority()来匹配角色 - 所有安全策略更新都应该在测试环境充分验证后才上线
建议大家在进行安全框架升级时,务必仔细阅读官方文档,避免因为配置变更导致的安全漏洞。

讨论