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

Struts2.3升级至6.0后登录报UT000010会话无效错误求助

Struts 2.3→6.0升级后登录出现UT000010无效会话问题解决

问题定位

UT000010是WildFly抛出的会话无效错误,结合Struts 6.0的CspInterceptor触发异常的堆栈信息,核心原因是:会话销毁后,请求仍携带旧会话ID,后续拦截器尝试通过该ID获取会话时触发异常。

你的登录Action逻辑存在会话处理的时序问题:

  1. 先销毁旧会话session.invalidate()
  2. 立即创建新会话getSession(true)
  3. 此时请求的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无法正确更新。

验证步骤

  1. 应用上述任意方案后,重启WildFly与应用
  2. 清除浏览器缓存及Cookie,重新尝试登录
  3. 查看服务器日志,确认UT000010错误是否消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:26:09