Tomcat 8.5.13 Cookie问题

时间:2017-04-11 11:03:45

标签: tomcat8

我们使用的是tomcat版本:8.0.33并尝试迁移到8.5.13

我们在应用程序中使用了cookie。但在上述版本中部署应用程序后,在回读cookie时遇到了错误,

  

2017-04-11 16:13:04错误错误:176 - 课堂上发生异常   com.TestController的异常细节是:   java.lang.IllegalArgumentException:一个无效的字符[34]   存在于Cookie值中   org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:182)   在   org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:115)

后来找到了解决问题的方法:

    // Previous code: 
    final Cookie cookies = new Cookie(key, value);
        //Fix code: 
final Cookie cookies = new Cookie(key, URLEncoder.encode(value, "UTF-8"));

我们必须对cookie中的值进行编码。

1 个答案:

答案 0 :(得分:1)

ASCII字符34(%x22)是双引号(")。

引用RFC 6265的相关部分:

cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
                      ; US-ASCII characters excluding CTLs,
                      ; whitespace DQUOTE, comma, semicolon,
                      ; and backslash
token             = <token, defined in [RFC2616], Section 2.2>

从上面可以看出,%x22不是有效的cookie-octet。 Tomcat将允许您添加可选的开始和结束双引号,但在其他地方使用双引号将触发您看到的错误。