Tomcat 9与Spring Security认证成功后重定向回登录页问题
一、Cookie处理器配置适配
1. 切换到LegacyCookieProcessor(快速兼容方案)
WebLogic的Cookie处理逻辑与Tomcat的LegacyCookieProcessor更接近,而TomEE 9默认使用的Rfc6265CookieProcessor对格式校验更严格,这是导致Invalid character [59]错误的核心原因。修改TomEE的conf/context.xml切换处理器:
<Context> <!-- 替换默认Cookie处理器为兼容WebLogic的版本 --> <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" /> </Context>
该处理器会放宽Cookie值的字符校验规则,和WebLogic的行为对齐,直接解决引号包裹JSESSIONID、特殊字符报错的问题。
2. 修复Cookie非法字符(长期规范方案)
如果要坚持使用标准的Rfc6265CookieProcessor,需要排查系统中生成Cookie的代码:
- 检查自定义认证过滤器、
LoginSuccessHandler里手动设置Cookie的逻辑 - 移除Cookie值中的非法字符(如ASCII 59对应分号
;,以及()、<>、@、:等RFC 6265禁用字符)
二、会话ID不一致问题修复
会话ID不延续本质是浏览器未正确携带认证后的JSESSIONID,导致每次请求新建会话,结合Cookie问题按以下步骤处理:
- 确认Cookie格式:切换
LegacyCookieProcessor后,检查/app/app_security_check的响应头,确保JSESSIONID无引号包裹、格式正常。 - 锁定会话跟踪模式:在TomEE的
conf/web.xml显式配置会话跟踪仅用Cookie:
<session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>
- 对齐Spring Security会话策略:确保Security配置中会话策略与WebLogic时期一致:
@Override protected void configure(HttpSecurity http) throws Exception { http // ... 其他认证配置 .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED); // 按需创建会话,匹配原有逻辑 }
- 校验重定向上下文:确认
/app/login/dashboard的上下文根与认证接口一致,避免跨上下文导致Cookie无法携带。
三、验证流程
- 重启TomEE加载新配置
- 打开浏览器开发者工具的Network标签:
- 检查认证接口响应头的JSESSIONID格式
- 检查dashboard请求的Request Headers是否携带正确的JSESSIONID
- 查看服务器日志,确认
SecurityContext在会话中持续存在,不再出现匿名用户判定
内容的提问来源于stack exchange,提问作者Bhanu123
相关产品推荐
相关产品推荐

