最近对系统进行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标准。
虽然这是一个简单的问题,但还是有所启示,无论是进行中间件升级,还是其他版本的升级,都是一件严谨而神圣事情,对于我们研发来说停下来思考一会儿也是一件好事,看看窗外的风景。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)