Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在tomcat 8中将Cookie处理器更改为LegacyCookieProcessor_Java_Cookies_Tomcat8 - Fatal编程技术网

Java 如何在tomcat 8中将Cookie处理器更改为LegacyCookieProcessor

Java 如何在tomcat 8中将Cookie处理器更改为LegacyCookieProcessor,java,cookies,tomcat8,Java,Cookies,Tomcat8,我的代码在tomcat 8版本8.0.33上运行,但在8.5.4上我得到: 为此cookie指定了无效的域[.mydomain] 我发现在Tomcat8的最新版本中引入了RFC6265Cookie处理器 官方文件上说,这可以在context.xml中恢复为LegacyCookieProcessor,但我不知道如何恢复 请让我知道怎么做 谢谢您可以在context.xml中尝试 <CookieProcessor className="org.apache.tomcat.util.http.L

我的代码在tomcat 8版本8.0.33上运行,但在8.5.4上我得到: 为此cookie指定了无效的域[.mydomain]

我发现在Tomcat8的最新版本中引入了RFC6265Cookie处理器

官方文件上说,这可以在context.xml中恢复为LegacyCookieProcessor,但我不知道如何恢复

请让我知道怎么做


谢谢

您可以在context.xml中尝试

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

参考:

启用以前版本的Tomcat中使用的LegacyCookieProcessor解决了我的应用程序中的问题。正如linzkl提到的,Apache的网站对此进行了解释

原因是新版本的Tomcat不理解。(点)位于正在使用的Cookie的域名前面

此外,请确保在使用Internet Explorer时进行检查。显然,它很可能会破裂

您可以在以下路径中找到context.xml

tomcat8/conf/context.xml

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

Tomcat9仍然存在问题。Tomcat9需要遵循相同的过程来设置类

在context.xml文件中添加该类

如果使用eclipse运行应用程序,则需要在服务器文件夹的context.xml文件中设置。有关更多参考,请参阅下面的屏幕截图


希望这对某人有所帮助。

案例1:您正在使用独立Tomcat&访问来更改Tomcat服务器中的文件

请跟随@linzkl

案例2:您使用的是独立Tomcat,但您无权更改Tomcat服务器中的文件

在应用程序的src/main/webapp/META-INF文件夹下创建一个名为context.xml的新文件,并粘贴下面给出的内容

<?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>

WEB-INF/WEB.xml
WEB-INF/tomcat-WEB.xml
${catalina.base}/conf/web.xml
在独立Tomcat中部署应用程序时,放置在META-INF文件夹下的context.xml文件将覆盖Tomcat/conf/context.xml中给出的context.xml文件

注意:如果您遵循此解决方案,则必须针对每个应用程序执行此操作,因为META-INF/context.xml是特定于应用程序的

案例3:您正在使用嵌入式Tomcat

为WebServerFactoryCustomizer创建新bean

@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());
                }
            });
        }
    };
}
@Bean
WebServerFactoryCustomizer cookieProcessorCustomizer(){
返回新的WebServerFactoryCustomizer(){
@凌驾
void自定义(TomcatServletWebServerFactory TomcatServletWebServerFactory){
tomcatServletWebServerFactory.AddContextCustomizer(新的TomcatContextCustomizer(){
@凌驾
公共void自定义(上下文){
setCookieProcessor(新的LegacyCookieProcessor());
}
});
}
};
}

正如@atul所提到的,这个问题在Tomcat 9中仍然存在。由于这是新的标准,它很可能会在Tomcat的所有未来版本中继续前进

使用传统cookie处理器(通过将上面的行添加到context.xml文件中)对我们来说效果很好。然而,真正的“修复”是首先调整cookie的形成方式。这需要在应用程序中完成,而不是在Tomcat中

<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" sameSiteCookies="none" />
新的cookie处理器不允许域以。(点)。调整cookie(如果可能)以其他值开始,将修复此问题,而不会恢复到旧的旧cookie处理器

另外,这应该是显而易见的,但我没有看到上面提到的内容:更新context.xml文件后,需要重新启动Tomcat服务,更改才能生效


干杯

tomcat版本<8.5.47中的SameSite问题已解决

在Tomcat 8.5.47和bellow(Tomcat 8版本)中,设置
CookieProcessor
标记以在
context.xml
中启用相同的站点(如下所示),由于Tomcat中存在错误,因此无法工作

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

如果您发现在这种情况下,立即升级tomcat不是一件容易的事情(我最近遇到过这种情况),或者如果您发现任何其他情况,您只需要在cookie中进行定制处理;您可以编写自己的
CookieProcessor
类来四处走动

请查找自定义
CookieProcessor
实现及其部署步骤的详细信息


在我的例子中,我基于
LegacyCookieProcessor
源代码编写了一个自定义
CookieProcessor
,该源代码允许tomcat 8.5.47在Cookie中启用
SameSite
属性。

有关解决方案,请参考我的答案@Fonexn