【问题标题】:Tomcat 7 exception when cookie contain umlaut characterscookie包含变音符号时的Tomcat 7异常
【发布时间】:2013-05-03 06:45:24
【问题描述】:

我是一名开发人员,当 Cookie 包含元音变音字符(ä、ö、ü)时,我遇到了以下异常,我尝试了许多解决方案和配置,但没有任何结果。

我用的是Tomcat7

有什么解决办法

Feb 21, 2013 6:29:16 AM org.apache.coyote.http11.AbstractHttp11Processor process
SEVERE: Error processing request
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
    at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193)
    at org.apache.tomcat.util.http.Cookies.getTokenEndPosition(Cookies.java:488)
    at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:291)
    at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:168)
    at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:106)
    at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:919)
    at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:688)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:402)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1600)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

【问题讨论】:

标签: java tomcat cookies tomcat7 illegalargumentexception


【解决方案1】:

根据对另一个问题的评论,您需要升级到 tomcat 8.0.15(或更高版本)并启用 RFC 6455 cookie 处理器。 记录在这里:http://tomcat.apache.org/tomcat-8.0-doc/config/cookie-processor.html

通过以下方式在您的 conf/context.xml 中启用它:

<Context>
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor" />
</Context>

【讨论】:

  • 在我的情况下,tomcat 7.0.68 升级到 8.5.15 可以解决问题,但它会导致另一个问题:java.lang.IllegalArgumentException: An invalid domain [.foo.bar.com] was specified for this cookie
【解决方案2】:

使用 UTF-8 编码。

您可以全局设置:

java -Dfile.encoding=UTF-8

或本地:

System.setProperty("file.encoding", "UTF-8");

byte inbytes[] = new byte[1024];
FileInputStream fis = new FileInputStream("the.location.of.your.cookie");
fis.read(inbytes);

另外,如果您手动编辑 cookie,请不要保存 Ä。而是使用等效的 UTF-8,即

System.out.println("\u00c4");



Chars   Unicode
------------------------------
Ä, ä    \u00c4, \u00e4
Ö, ö    \u00d6, \u00f6
Ü, ü    \u00dc, \u00fc
ß       \u00df

【讨论】:

    【解决方案3】:

    现在我遇到了同样的问题,首先我尝试将 tomcat 7 升级到 tomcat 8.5.51 它可以工作,但它提出了新问题

    java.lang.IllegalArgumentException: An invalid domain [.foo.bar.com] was specified for this cookie
    

    因为我的情况不需要cookie,所以我只是在Nginx级别排除cookie,它也可以解决这个问题

        proxy_set_header Cookie "";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-20
      • 2016-04-06
      • 2014-04-02
      • 2017-11-29
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多