栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

        最近对系统进行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标准。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号