Tomcat写Cookie包含双引号问题

之前有一个java后台处理cookie的简单需求,但是cookie的值是包含特殊符号的一串字符串如:

uoeOwviAJ6VQEgTNwLuTqSV9j/bS+aOP3Riia1P+kyQbgkQZsD2gidgV9y0ObPgHaK1jGRuV/ogQh92/eK0bOZIBgf3qugWHL9vugj04hgtaNk0Gj/R7rz7oqiBhjlrKOqlpsCOus6v/HwtGKaj3qVz/e1TTHgzQIh4vje/62plfG0dwz95YT6F5PULR+Kobpo+K5EenGT0gKJrPmCSn57yrxa6uiIOZDkImXa6x08/S3eExwtoDsaerOuBf5ZHTwflFyE/PFf7jYfdqXH6eAmCKdetG8qPqJZXnRcApC2wW4XcwqSJ0pA==

项目部署在tomcat容器,发现写入的cookie被自动添加上了双引号。导致调用方读取到cookie解析失败。

查看了一些资料,比较好的做法是先将cookie url编码,读取时url 解码即可。

但是这就要调用方二次开发做兼容。且老接口(.net)是支持将上述cookie 写入的。

阅读tomcat源码, org.apache.tomcat.util.http包下的CookieSupport:

/**

* If true, cookie values are allowed to contain an equals character without

* being quoted.

*/

public static final boolean ALLOW_EQUALS_IN_VALUE;

设置System.setProperty("org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE", "true"),允许使用=符号

/**

* If true, separators that are not explicitly dis-allowed by the v0 cookie

* spec but are disallowed by the HTTP spec will be allowed in v0 cookie

* names and values. These characters are: \"()/:<=>?@[\\]{} Note that the

* inclusion of / depends on the value of {@link #FWD_SLASH_IS_SEPARATOR}.

*/

public static final boolean ALLOW_HTTP_SEPARATORS_IN_V0;

设置System.setProperty("org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0", "true"),允许使用http分隔符

也可在tomcat 的conf目录下更改catalina.properties,添加以上两个配置。 

你可能感兴趣的:(Tomcat写Cookie包含双引号问题)