Struts2.3升级至6.0后登录报UT000010会话无效错误求助
Struts 2.3→6.0升级后登录出现UT000010无效会话问题解决
问题定位
UT000010是WildFly抛出的会话无效错误,结合Struts 6.0的CspInterceptor触发异常的堆栈信息,核心原因是:会话销毁后,请求仍携带旧会话ID,后续拦截器尝试通过该ID获取会话时触发异常。
你的登录Action逻辑存在会话处理的时序问题:
- 先销毁旧会话
session.invalidate() - 立即创建新会话
getSession(true) - 此时请求的Cookie仍保留旧会话ID,
CspInterceptor(在Action执行前后运行)尝试通过旧ID获取会话,触发WildFly的无效会话报错。
另外,getSessionObject方法在新会话创建后用getSession(false)获取会话本身无问题,但会话ID的Cookie未及时更新是关键矛盾点。
解决方案
方案1:手动清除旧会话Cookie(推荐)
在销毁旧会话后,主动清除浏览器端的旧JSESSIONIDCookie,再创建新会话,确保后续请求携带新会话ID:
if(null==mode) { HttpServletRequest request = getServletRequest(); HttpServletResponse response = getServletResponse(); HttpSession session = request.getSession(false); log.debug(session + "" + request.getSession(false)); if (null != session) { session.invalidate(); // 清除旧JSESSIONID Cookie Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if ("JSESSIONID".equals(cookie.getName())) { cookie.setMaxAge(0); cookie.setPath(request.getContextPath()); response.addCookie(cookie); break; } } } } // 创建新会话 session = request.getSession(true); } userVO=(UserVO)getSessionObject(getServletRequest(),TorchConstants.GLOBAL_USERINFO_KEY);
方案2:临时排除登录Action的CspInterceptor(排查用)
如果需要快速验证是否为CspInterceptor导致的问题,可临时在struts.xml中配置排除登录方法:
<interceptors> <default-interceptor-ref name="defaultStack"> <param name="cspInterceptor.excludeMethods">login</param> </default-interceptor-ref> </interceptors>
注意:此为临时排查方案,CSP是安全特性,不建议长期禁用。
方案3:调整Struts会话管理配置
Struts 6.0对会话处理更严格,检查struts.xml中的相关配置:
<!-- 确保会话上下文正确绑定 --> <constant name="struts.servlet.context.check" value="true"/> <!-- 允许自动创建会话 --> <constant name="struts.session.autoCreate" value="true"/>
方案4:检查WildFly会话Cookie配置
WildFly 24+的会话Cookie默认配置可能与旧版本不同,检查standalone.xml中的Undertow子系统配置:
<subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <servlet-container name="default"> <session-cookie http-only="true" secure="true"/> <session-management> <session-tracking cookie-same-site="Lax"/> </session-management> </servlet-container> </subsystem>
确保Cookie的SameSite、Secure等属性与应用部署环境(HTTP/HTTPS)匹配,避免Cookie无法正确更新。
验证步骤
- 应用上述任意方案后,重启WildFly与应用
- 清除浏览器缓存及Cookie,重新尝试登录
- 查看服务器日志,确认UT000010错误是否消失
内容的提问来源于stack exchange,提问作者vikas
相关产品推荐
相关产品推荐

