Как изменить обработчик файлов cookie на LegacyCookieProcessor в tomcat 8

Мой код работает на tomcat 8 версии 8.0.33, но на 8.5.4 я получаю: для этого файла cookie был указан недопустимый домен [.mydomain].

Я обнаружил, что Rfc6265CookieProcessor представлен в последних версиях tomcat 8.

В официальном документе говорится, что это можно вернуть к LegacyCookieProcessor в context.xml, но я не знаю, как это сделать.

Пожалуйста, дайте мне знать, как это сделать.

Спасибо


person Sachin Sharma    schedule 01.08.2016    source источник


Ответы (6)


Вы можете попробовать в context.xml

<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />

ссылка: https://tomcat.apache.org/tomcat-8.0-doc/config/cookie-processor.html

person linzkl    schedule 01.08.2016
comment
Обратитесь к моему ответу за решением @Fonexn - person IamVickyAV; 28.06.2019

Вариант 1: вы используете автономный сервер Tomcat и имеете доступ для изменения файлов на сервере tomcat.

Следуйте ответу от @linzkl

Вариант 2: вы используете автономный сервер Tomcat, но у вас нет доступа для изменения файлов на сервере tomcat.

Создайте новый файл с именем context.xml в папке src/main/webapp/META-INF в своем приложении и вставьте содержимое, указанное ниже.

<?xml version="1.0" encoding="UTF-8"?> 
<Context>
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
  <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> 
  <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
</Context>

Когда вы развертываете свое приложение в автономном Tomcat, файл context.xml, который вы поместили в папку META-INF, переопределит файл context.xml, указанный в tomcat/conf/context.xml.

Примечание. Если вы используете это решение, вы должны сделать это для каждого отдельного приложения, поскольку META-INF/context.xml зависит от приложения.

Случай 3. Вы используете Встроенный Tomcat.

Создайте новый компонент для WebServerFactoryCustomizer.

@Bean
WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
    return new WebServerFactoryCustomizer<TomcatServletWebServerFactory>() {

        @Override
        void customize(TomcatServletWebServerFactory tomcatServletWebServerFactory) {
            tomcatServletWebServerFactory.addContextCustomizers(new TomcatContextCustomizer() {
                @Override
                public void customize(Context context) {
                    context.setCookieProcessor(new LegacyCookieProcessor());
                }
            });
        }
    };
}
person IamVickyAV    schedule 28.06.2019

Включение LegacyCookieProcessor, который использовался в предыдущих версиях Tomcat, решило проблему в моем приложении. Как упомянул linzkl, это объясняется на веб-сайте Apache https://tomcat.apache.org/tomcat-8.0-doc/config/cookie-processor.html.

Причина в том, что новая версия Tomcat не понимает расширение . (точка) перед доменным именем используемого файла cookie.

Также не забудьте проверить этот пост при использовании Internet Explorer. Судя по всему, очень вероятно, что он сломается.

Вы можете найти context.xml по следующему пути.

tomcat8/conf/context.xml

<?xml version="1.0" encoding="UTF-8”?>
<!-- The contents of this file will be loaded for each web application —>
<Context>
<!-- Default set of monitored resources. If one of these changes, the    -->
<!-- web application will be reloaded.                                   -->

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!-- <Manager pathname="" /> -->
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor"/>
</Context>
person smos    schedule 09.10.2017

Проблема все еще с Tomcat9. Тот же процесс необходимо выполнить для Tomcat 9, чтобы установить класс.

Добавьте класс в файл context.xml.

Если вы используете eclipse для запуска приложения, необходимо установить его в файле context.xml в папке сервера. Обратитесь к приведенному ниже снимку экрана для получения дополнительной справки.

введите здесь описание изображения

Надеюсь, это поможет кому-то.

person Atul    schedule 25.06.2019

Проблема с SameSite в версии tomcat ‹ 8.5.47 решена

В Tomcat 8.5.47 и ниже (версии Tomcat 8) установка тега CookieProcessor для включения того же сайта (как указано ниже) в context.xml не работает из-за ошибки в Tomcat.

<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" sameSiteCookies="none" />

Если вы обнаружите, что в этой ситуации непросто немедленно обновить tomcat (с чем я недавно столкнулся), или если вы обнаружите любой другой случай, когда вам просто нужна специальная обработка в файлах cookie; Вы можете написать свой собственный класс CookieProcessor, чтобы обойтись.

Найдите пользовательскую реализацию CookieProcessor и подробные сведения об этапах ее развертывания здесь.

В моем случае я написал собственный CookieProcessor на основе исходного кода LegacyCookieProcessor, который позволяет tomcat 8.5.47 включать атрибут SameSite в файлах cookie.

person Sandeep Poojary    schedule 25.02.2021

Как упоминал @atul, эта проблема сохраняется в Tomcat 9. Скорее всего, она сохранится во всех будущих версиях Tomcat, поскольку это новый стандарт.

Использование устаревшего обработчика файлов cookie (путем добавления приведенной выше строки в файл context.xml) работает хорошо для нас. Однако настоящее «исправление» заключается в том, чтобы в первую очередь настроить способ формирования файла cookie. Это нужно будет сделать в вашем приложении, а не в Tomcat.

Новый обработчик файлов cookie не позволяет домену начинаться с . (точка). Настройка вашего файла cookie (если возможно) для запуска с другого значения, которое устранит эту проблему, не возвращаясь к старому, устаревшему процессору файлов cookie.

Кроме того, это должно быть очевидно, но я не видел упомянутого выше: после обновления файла context.xml вам необходимо перезапустить службу Tomcat, чтобы изменения вступили в силу.

Ваше здоровье!

person PatrickV    schedule 24.09.2020