2013-05-08 13 views
5

Sono uno sviluppatore e affronterò l'eccezione seguente quando Cookie contiene caratteri di umlaut (ä, ö, ü), ho provato molte soluzioni e configurazioni senza alcun risultato.Tomcat 7 eccezione quando i cookie contengono caratteri di umlaut

Io uso Tomcat7

Qualsiasi soluzione si prega

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) 
+0

Vedi http://stackoverflow.com/questions/6108207/definite-guide-to-valid-cookie-values e http://stackoverflow.com/questions/1969232/allowed-characters-in-cookies. Una soluzione è codificare la stringa in UTF-8 e utilizzare base64 per ottenere caratteri ascii accettabili. –

risposta

0

Usa codifica UTF-8.

È possibile impostarlo a livello globale:

java -Dfile.encoding=UTF-8 

o localmente:

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

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

Inoltre, se si sta modificando i cookie manualmente, non salvare una. Invece utilizzare la codifica UTF-8 equivalente, che è

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



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

Secondo un commento su un'altra domanda, è necessario aggiornare a Tomcat 8.0.15 (o superiore) e abilitare il processore cookie di RFC 6455. qui documentata: http://tomcat.apache.org/tomcat-8.0-doc/config/cookie-processor.html

abilitarlo nella conf/context.xml tramite:

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