一个默认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标准。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值