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

Spring Boot SSO接口在Chrome多次请求后意外返回302问题求助

问题场景
  • 后端基于Java Spring Boot 2.4.13,原MVC架构,正迁移至Vue+REST架构
  • 集成第三方LS的SSO流程:用户点击LS站点SSO按钮后,LS向我方/sso POST接口发送带token的请求;我方将token存入会话,通过ModelAndView跳转至自动提交表单的JSP页面,完成用户在LS的登录
  • 功能在Firefox中完全正常,但Chrome/Edge等Chromium内核浏览器中,首次操作正常,多次操作或等待数分钟后,LS触发的POST请求会被服务器返回302重定向至登录页(用户实际处于登录状态)
  • 异常时请求未进入/sso控制器,自定义Servlet过滤器也未捕获到该302响应;302的Location包含登录URL及errorKey=rs.home.loginRequired,追踪确认来自Web Security配置的LoginUrlAuthenticationEntryPoint Bean,推测服务器误判用户未登录
排查方向

1. 会话Cookie的SameSite属性限制

Chromium对跨域Cookie的SameSite属性限制远严格于Firefox:

  • 检查我方会话Cookie(如JSESSIONID)的SameSite设置,若为Strict或Lax,跨域POST请求(LS向我方/sso发起)可能无法携带Cookie,导致服务器认为用户未登录
  • 尝试将SameSite设置为None并开启Secure(需HTTPS环境),验证是否解决问题
  • 对比Firefox和Chrome异常时请求携带的Cookie列表,确认是否缺失会话Cookie

2. Spring Security的CSRF拦截

Spring Security默认开启CSRF防护,跨域POST请求若未携带有效CSRF Token会被拦截,触发登录重定向:

  • 临时在Web Security配置中为/sso接口关闭CSRF防护(csrf().ignoringAntMatchers("/sso")),验证是否是CSRF导致的拦截
  • 若确认是CSRF问题,需让LS在请求中携带我方生成的CSRF Token,或调整CSRF防护策略

3. 会话状态与浏览器缓存冲突

  • 对比服务器会话超时时间与异常出现的等待时长,检查是否存在会话超时误判;同时查看响应头Set-Cookie的超时配置是否正确
  • 检查Spring Security的会话管理配置,如sessionFixation()、maximumSessions()等是否会导致会话被意外销毁

4. Chromium的预加载机制

Chromium的预加载功能可能提前发送请求,导致会话状态异常:

  • 查看Chrome网络请求记录的Purpose字段,确认异常请求是否为预加载请求
  • 在/sso接口响应中添加X-Robots-Tag: noindex, nofollow或Cache-Control: no-cache, no-store, must-revalidate, proxy-revalidate头,禁止浏览器预加载该接口

5. Spring Security的路径权限配置

  • 确认/sso接口是否在Spring Security的permitAll()配置中,若未配置,会被认证拦截触发302重定向
  • 检查Web Security中过滤器的执行顺序,是否有自定义过滤器在认证过滤器之前执行,导致会话状态未被正确识别

6. Cookie路径(Path)配置

  • 检查会话Cookie的Path属性,若路径范围过小(如限定为子路径),跨域请求可能无法携带正确的Cookie,需确保Path设置为项目根路径/

内容的提问来源于stack exchange,提问作者Mimerr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:18