Как изменить разделитель / разделитель в Tomcat для JSESSIONID и jvmRoute? - PullRequest
0 голосов
/ 11 января 2019

Используя Tomcat 9.0.13, openJDK 8 работает на rhel 7.
Наше приложение использовалось для работы в Websphere, где разделитель сеансового маршрута может быть указан с помощью CloneSeparatorChange. JSESSIONID хранится в файле cookie, установленном на Secure и HttpOnly.

Tomcat обычно использует "." как его разделитель между JSESSIONID и jvmRoute (CloneID в мире Websphere), но наш код ожидает значение «:» в Websphere.

Мой вопрос: есть ли способ изменить разделитель сеанса в "." другому персонажу произнесите ":"?

1 Ответ

0 голосов
/ 13 января 2019

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, переопределить generateSessionId, вызвав метод super и заменив символ.

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

Затем вы можете настроить свой класс CustomSessionIdGenerator в компоненте Manager внутри компонента Context в файлах конфигурации Tomcat, таких как context.xml.

...