Spring Security配置失效问题排查:直接访问/toQuestion正常,JS跳转却重定向至登录页
明明已经给/toQuestion开放了匿名访问权限,直接访问正常但JS跳转却被重定向到登录页,这种情况大概率是以下几个细节出了问题,给你逐个排查方向:
1. 检查控制器是否有自定义权限注解
如果/toQuestion对应的控制器方法上标注了@PreAuthorize、@Secured这类权限注解(比如@PreAuthorize("isAuthenticated()")),Spring Security会优先执行控制器层面的权限校验,就算你在配置类里设置了permitAll()也会被覆盖。
解决办法:
- 直接去掉控制器方法上的权限注解;
- 或者把注解规则调整为允许匿名访问,比如
@PreAuthorize("permitAll()")。
2. 排查浏览器缓存问题
浏览器可能缓存了之前未开放权限时的重定向响应,哪怕你已经修改了Spring Security配置,它还是会自动跳转到登录页。
解决办法:
- 打开浏览器开发者工具(F12),在「网络」标签勾选「禁用缓存」后重新测试;
- 或者直接清除浏览器的缓存再尝试。
3. 确认JS跳转的路径是否正确
虽然你写的是window.location.href = "/toQuestion";,但要注意当前页面的基础路径:如果应用部署在子路径下(比如http://localhost:8080/myapp),这个相对路径会跳转到http://localhost:8080/toQuestion,而非应用根路径下的http://localhost:8080/myapp/toQuestion,这时候可能因为路径不匹配触发拦截。
解决办法:
- 使用基于应用根路径的跳转方式,比如:
或者直接写完整URL:// 动态获取应用根路径 const baseUrl = window.location.origin + window.location.pathname.split('/').slice(0, -1).join('/'); window.location.href = `${baseUrl}/toQuestion`;window.location.href = "http://localhost:8080/toQuestion";
4. 检查是否有其他拦截器/过滤器干扰
除了Spring Security,项目里可能还有自定义的拦截器(比如实现HandlerInterceptor的类)或过滤器(实现Filter的类),它们可能在Spring Security之前拦截请求,做了额外的登录校验并重定向。
解决办法:
- 排查项目中的自定义拦截器/过滤器,确认它们是否对
/toQuestion路径做了校验; - 如果有,修改规则允许
/toQuestion跳过校验。
5. 确认Spring Security配置是否生效
有时候配置类没被Spring正确扫描,或者代码有隐性错误,会导致permitAll()配置没生效。
解决办法:
- 检查配置类上是否标注了
@Configuration和@EnableWebSecurity注解; - 启动项目时查看日志,确认Spring Security加载的配置里包含
/toQuestion的permitAll规则。
你可以按这个顺序排查,应该能快速定位问题。
内容的提问来源于stack exchange,提问作者ge1mina023

