【问题标题】:Tomcat 8.5.13 Cookie IssueTomcat 8.5.13 Cookie 问题
【发布时间】:2018-08-29 21:00:54
【问题描述】:

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

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

2017-04-11 16:13:04 ERROR 错误: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 中的值进行编码。

【问题讨论】:

  • 尝试添加有关您的问题的更多信息
  • 首先:触发此问题的代码
  • 用修复更新了问题。对 cookie 值进行编码解决了问题

标签: tomcat8


【解决方案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 八位字节。 Tomcat 将允许您添加可选的开始和结束双引号,但其他任何地方的双引号都会触发您看到的错误。

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2022-12-16
    • 2012-03-20
    • 2019-01-14
    • 2011-03-21
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多