解决tomcat服务器在response中写入cookie带引号问题

在工作中碰到一个关于cookie带引号的问题,记录一下。

业务流程:

1.页面通过request访问服务器地址A;

2.在controller层接到请求并向response中写入cookie:nameCookie;

3.然后response重定向到新的地址B;

4.新的地址的页面中获取cookie的value,并作为凭据请求服务器的另一个地址C。

发现问题:

公司环境为本地环境dev、测试环境qa、仿真环境sim和生产环境online。项目在dev,qa,sim环境运行均可正常运行,但在上到生产环境后无法正常访问地址C。

排查步骤:

1.排查代码是否合并成功,没问题;

2.排查发版包代码是否包含最新代码,没问题;

3.浏览器检查cookie,发现online环境的cookie的value有双引号,但是dev,qa,sim环境均没有双引号;

4.删除online环境中cookie的双引号刷新页面,可正常访问地址C,由此定位到问题是cookie的双引号导致。

查找文献:

此部分感谢https://www.jianshu.com/p/9242a8a84f73的作者憨人Zoe。简述就是返回的cookie的value中带有“=”,导致低版本的tomcat会给cookie的value弄上双引号buff加持。

解决流程:

1.找运维同学检查online环境和其他测试环境的tomcat版本,发现onlilne环境是8.0.53,其他环境是8.5.38;

2.剥离online一台机器T,在tomcat的catalina.properties中添加如下配置

org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true #cookie的value中允许使用=符号

3.重启机器T,使用ip访问地址A,跳转到新的页面后cookie中没有nameCookie(原因是因为ip访问无法获得cookie的域);

4.所有机器均加上

org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true,

org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true,

org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V1=true

5.重启所有机器(低峰访问时段,有上线策略),使用域名访问地址A,跳转到新的页面后cookie的value中还是带有双引号;

6.online所有机器升级tomcat版本至8.5.38;

7.重启所有机器,使用域名访问地址A,成功跳转到地址B,并访问到地址C的资源,成功。

总结

1.环境问题就直接统一环境,不要搞其他的有的没得配置。一步到位,免得折腾。

2.暴露出公司的项目部署环境不规范问题,要加强项目部署环境的一致性,特别是生产环境online和仿真环境sim的一致性;

3.在本次问题的解决过程中流程是很不规范的,测试解决效果应该在测试环境中进行,而不是直接在生产环境进行尝试。我的本次行动是在晚上低峰并且有公司上线策略的支持下进行的(我是不会告诉你我是在半夜两点拖着运维同学一起搞这个事情的 zzz);

4.中间加参数没有成功的原因为也是没搞懂,如果有大佬知晓的话,可以在评论区指导一下,不胜感激,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值