Dhu*_*wal 15 java cookies networking tomcat web
我正在将我的服务器从Tomcat-6 迁移到Tomcat-9.我的网站是为HTTP/1.1协议设计的.server.xml文件包含org.apache.coyote.http11.Http11NioProtocol的连接器协议.服务器正常启动而不会产生任何错误.但是,当我尝试使用localhost访问我的网站时,我收到以下错误: -
INFO [https-nio-8445-exec-3] org.apache.tomcat.util.http.parser.Cookie.logInvalidHeader收到一个cookie标题[ 2,3,4,5,6,7,8,9,10,11,12,21,22,23]; userId = 53136]包含无效的cookie.该cookie将被忽略.注意:将在DEBUG级别记录此错误的进一步发生.
谁能告诉我这个错误的原因?导致无效Cookie的原因是什么?如果我使用不同的连接器,是否可以避免此错误?
小智 7
我在 2.2.x 以上版本的 Spring Boot 中遇到了这个问题
添加下面的 bean 后它得到修复
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
return tomcatServletWebServerFactory -> tomcatServletWebServerFactory.addContextCustomizers((TomcatContextCustomizer) context -> {
context.setCookieProcessor(new LegacyCookieProcessor());
});
}
Run Code Online (Sandbox Code Playgroud)
我发现部署在 tomcat 上的 API 在我发送 cURL 请求时能够抓取 cookie,尽管有 tomcat 警告。
curl -XPOST -H "Content-Type: application/json" --cookie "userId=64ad960c-bb7e-48dd-8191-4f31539bc2c2,accessToken=64ad960c-bb7e-48dd-8191-4f31539bc2c2" -d '{"message":"play porcupine tree"}' http://localhost:9090/nlu/convo
Run Code Online (Sandbox Code Playgroud)
但是要删除警告,必须更新LegacyCookieProcessortomcat 配置 ( conf/context.xml)中的cookie 处理器( )
例子,
cat /usr/local/apache-tomcat-8.5.12/conf/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- The contents of this file will be loaded for each web application -->
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!--
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor" />
-->
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
</Context>
Run Code Online (Sandbox Code Playgroud)
我认为org.apache.tomcat.util.http.Rfc6265CookieProcessor会起作用但没有,这LegacyCookieProcessor是必需的。
https://tools.ietf.org/html/rfc6265
LegacyCookieProcessor实现对 cookie 规范的严格解释。由于浏览器的各种互操作性问题,并非所有严格行为都默认启用,如果需要,可以使用其他选项进一步放宽此 cookie 处理器的行为。