Spring Security内存认证首次通过后任意密码均可通过问题排查
问题根源与解决方案
你的问题核心是HTTP Basic认证的客户端缓存+Spring Security会话默认行为导致的异常:
- Postman等客户端会自动缓存HTTP Basic的
Authorization请求头,修改密码后未清除缓存时,依然会发送旧认证凭证,因此能继续通过认证。 - Spring Security默认会创建会话,认证成功后会话会被保留,后续请求只要携带有效的会话ID(如
JSESSIONID),就会直接放行,不再验证密码,所以出现"正确认证后错误密码也能访问"的情况。
具体修复配置
1. 配置无状态认证(核心修改)
Basic认证多用于无状态场景,修改configure(HttpSecurity)方法,强制Spring Security不创建会话,每次请求都重新验证凭证:
@Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) // 关键:禁用会话,每次请求重新验证 .and() .authorizeRequests() .anyRequest().authenticated() .and() .httpBasic(); }
2. 清除客户端缓存
在Postman中处理缓存问题:
- 打开请求的
Authorization标签,选择Basic Auth,点击Clear credentials; - 或者直接删除请求头中的
Authorization字段,重新输入新的用户名密码。
验证步骤
- 修改配置后重启应用;
- 用错误密码请求,返回401(符合预期);
- 用正确密码请求,返回200;
- 再用错误密码请求,返回401(无状态模式下每次都验证凭证,会拒绝错误请求);
- 修改密码后,清除客户端缓存,用新密码请求通过,旧密码请求返回401。
内容的提问来源于stack exchange,提问作者skywalker
相关产品推荐
相关产品推荐

