【问题标题】:How to change the delimiter/separator in Tomcat for JSESSIONID and jvmRoute?如何更改 Tomcat 中 JSESSIONID 和 jvmRoute 的分隔符/分隔符?
【发布时间】:2019-01-13 10:05:55
【问题描述】:

使用Tomcat 9.0.13,在rhel 7上运行openJDK 8。
我们的应用程序曾经在 Websphere 上运行,其中会话路由分隔符可以使用 CloneSeparatorChange 指定。 JSESSIONID 存储在设置为 Secure 和 HttpOnly 的 cookie 中。

Tomcat 通常使用“.”作为 JSESSIONID 和 jvmRoute(Websphere 世界中的 CloneID)之间的分隔符,但我们的代码需要在 Websphere 中设置“:”。

我的问题:有没有办法将 sessionid 分隔符从“。”更改为对另一个角色说“:”?

【问题讨论】:

    标签: java tomcat jsessionid


    【解决方案1】:

    jvmRoute 由SessionIdGenerator Component 接口的实现处理。 标准实现 org.apache.catalina.util.StandardSessionIdGenerator 不提供配置用于将 jvmRoute 添加到 JSESSIONID 的分隔符的方法: https://github.com/apache/tomcat/blob/trunk/java/org/apache/catalina/util/StandardSessionIdGenerator.java#L52-L59

    if (route != null && route.length() > 0) {
        buffer.append('.').append(route);
    } else {
        String jvmRoute = getJvmRoute();
        if (jvmRoute != null && jvmRoute.length() > 0) {
            buffer.append('.').append(jvmRoute);
        }
    }
    

    '.'字符是硬编码的,因此您无法通过配置更改它。 幸运的是,您可以配置用于生成 SessionId 的类:

    我的建议是扩展 StandardSessionIdGenerator 类,通过调用 super 方法并替换字符来覆盖 generateSessionId。

    class CustomSessionIdGenerator extends StandardSessionIdGenerator{
        @Override
        public String generateSessionId(String route) {
            String sessionId = super(route);
            return sessionId.replace('.',':');
        }
    }
    

    然后,您可以在 tomcat 的配置文件(如 context.xml)的 Context 组件内的 Manager 组件中配置您的 CustomSessionIdGenerator 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多