Spring Boot 2.0默认安全配置下登录尝试失败问题求助
老哥,我来帮你排查下这个头疼的问题——提交登录表单后没任何提示就刷新,大概率是默认安全配置的细节没踩对,结合你说的迁移场景,我整理了几个常见排查点:
1. 先确认Gradle依赖是否到位
你提到了gradle.build的片段,首先得确保Spring Security的starter是正确引入的,Spring Boot 2的默认安全依赖应该是:
implementation 'org.springframework.boot:spring-boot-starter-security'
要是依赖缺了或者版本和Spring Boot 2不匹配,安全过滤器链根本没初始化,表单提交后自然没法处理认证请求,直接就刷新页面了。
2. 别用旧的生成密码!
Spring Boot 2每次启动都会在控制台打印全新的默认密码,格式是这样的:
Using generated security password: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
很多人容易犯的错就是用上次启动的密码,结果认证失败,但默认配置下认证失败只会重定向回登录页,而且默认表单没做错误提示,看起来就像页面单纯刷新。赶紧去看最新启动日志里的密码,再试一次。
3. 排查CSRF或请求拦截问题
CSRF临时测试:Spring Security默认开了CSRF保护,虽然默认登录表单自动带了令牌,但万一你不小心改了页面或者有其他过滤器干扰,可能导致请求被拦截。可以临时关了CSRF试试(注意生产环境别这么干):
@Configuration public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf.disable()) .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .formLogin(form -> form.permitAll()); return http.build(); } }对了,Spring Boot 2.7+已经弃用
WebSecurityConfigurationAdapter了,迁移指南里也推荐用SecurityFilterChain这种Bean方式配置,你之前没自定义,现在用这个方式微调测试刚好。路径冲突:默认登录表单提交路径是
/login,如果你的应用里有自定义的@Controller或者过滤器抢了这个路径的处理权,Spring Security就接不到认证请求,直接刷新页面。检查下有没有代码处理了/login路径。
4. 开调试日志看真相
要是上面的方法都没搞定,直接开Spring Security的调试日志,看认证流程到底出啥问题了。在application.properties里加一行:
logging.level.org.springframework.security=DEBUG
启动后再登录,控制台会打印详细的认证步骤:有没有接收到请求、密码对不对、为啥失败……这些日志一出来,问题根源就一目了然了。
5. 检查视图解析或错误页面配置
如果你配置了自定义错误页面,或者视图解析器有问题,可能导致认证失败的提示没法显示,看起来就像页面刷新。可以先把自定义错误页面的配置注释掉,用默认的视图解析器试试。
内容的提问来源于stack exchange,提问作者sn42

