项目场景:
前段时间在写一个前后端分离的项目时遇到了一个不是问题的问题,记录一下。
就是在后端生成token返回给前端,前端把token存到cookie中去,然后前端后面携带token去做校验鉴权,就在这个过程中token不知道为啥就多了一对双引号。就是原来是:"abcdefg"的但是再次回到后端时已经是多了一对双引号,变成这样了:""abcdefg"",也就是因为多了一对双引号,导致后端在做校验时死活不通过。
原因分析:
一开始我也是没有注意到是多了一对双引号的问题,毕竟字符串很多时候打印是会吧双引号省略的,就变成了"abcdefg",一看还挺顺眼,好像也没有啥错的。但是后面再后端debug的时候才发现""abcdefg""有点怪怪的。百度了一下,好像是tomcat在token存入到cookie的时候加上去的。因为代码是一致的,在其他tomcat版本执行,没有问题,所以想到是tomcat版本不一致导致的。目前场景所用的版本为:tomcat 8.0.35 而正常可使用的tomcat版本是较高的版本8.5.6
解决方案:
1、可以直接把双引号给删掉,这个会不会引出其他问题我就不知道了。
2、在版本较低的tomcat下,进行对catalina.properties加上如下配置:
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