一个默认cookie处理器引发的问题

一个默认cookie处理器引发的问题,第1张

        最近对系统进行jdk升级的过程中,其中一个预发环境在设置顶层域名cookie时出现了如下的错误,这里tomcat版本为:8.5.42, jdk版本为1.8.0u192。

java.lang.IllegalArgumentException: An invalid domain [.XXXX] was specified for this cookie
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:210)
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:145)
at org.apache.catalina.connector.Response.generateCookieString(Response.java:983)
at org.apache.catalina.connector.Response.addCookie(Response.java:931)
at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:386)

查看对应的代码

从上面的源码中可以看到,在这个版本中有效的domain的不支持以dot开头了。

根本原因

        发现这个generateHeader方法中有两个实现,查看源码可知,tomcat8.5版本默认使用的是Rfc6265CookieProcessor实现的,它是基于RFC6265的。

 而在低版本,如tomcat8.0.50中, 默认为LegacyCookieProcessor,这是基于 RFC6265、RFC2109 和 RFC2616 的遗留 cookie 解析器,由于与浏览器的各种互 *** 作性问题,并非所有严格行为都默认启用。

目前官网中有关于这两个cookie解析器的对比,再此就不再细述(https://tomcat.apache.org/tomcat-8.5-doc/config/cookie-processor.html)。

解决方案 

1、指定cookie处理器,对于独立的tomcat,修改配置文件context.xml,指定CookieProcessor为LegacyCookieProcessor即可,对于springboot内嵌tomcat,在springboot启动中增加内嵌tomcat的配置即可。

2、降低tomcat的版本。

3、更改代码,使cookie满足RFC6265标准。

虽然这是一个简单的问题,但还是有所启示,无论是进行中间件升级,还是其他版本的升级,都是一件严谨而神圣事情,对于我们研发来说停下来思考一会儿也是一件好事,看看窗外的风景。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/721983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存