2013-03-19 5 views
6

Ho tutto in UTF-8. Ciò include Content-Type, database, file, java, tutto (a meno che non mi sia sfuggito qualcosa).JBoss AS 7.1 - Codifica parametri richiesta

Seguo molte risposte StackOverflow, JIRA, blog ed ecc., Ma non riesce ancora.

Il problema in sé è la seguente:

Quando mi presento, supponiamo, a http://localhost:8080/app/searh?text=café, il debug, il mio request.getParameter("text") è sempre sbagliato, qualcosa come café, e request.getCharachterEncoding() mi dà null (?).

Guardando le intestazioni di richiesta, ho ottenuto questo:

GET http://localhost:8080/app/search?text=caf%C3%A9 HTTP/1.1 
Host: localhost:8080 
Proxy-Connection: keep-alive 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17 
Referer: http://localhost:8080/app/search?text=n%C3%A3o 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4 
Accept-Charset: UTF-8,*;q=0.5 
Cookie: JSESSIONID=OMMITED 

e la risposta intestazioni:

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Pragma: No-cache 
Cache-Control: no-cache 
Expires: Wed, 31 Dec 1969 21:00:00 BRT 
Content-Type: text/html;charset=UTF-8 
Transfer-Encoding: chunked 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Date: Tue, 19 Mar 2013 14:06:24 GMT 
Proxy-Connection: keep-alive 
Connection: keep-alive 

E 'tutto ciò UTF-8. Io proprio non capisco.

Ho cercato di passare -Dfile.encoding=UTF-8 -Dfile.io.encoding=UTF-8 -DjavaEncoding=UTF-8 nella mia variabile standalone.confJAVA_OPTS, ha cercato di mettere

<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 

nel mio standalone.xml. Niente di ciò risolve il problema.

Cosa posso provare a fare per risolvere questo problema?

Grazie in anticipo.

BTW: JBoss AS 7.1.1.

risposta

3

Sono entrato nello stesso problema ma in Jboss 5.1 e ho risolto aggiungendo l'attributo URIEncoding al connettore HTTP (in jbossweb/server.xml) e decodificando i parametri URL/GET manualmente.

Ma il modo di definirlo in Jboss7 è diverso dalle versioni precedenti, ma un po 'googling ho trovato questo link: in pratica devi aggiungere le seguenti righe nel file standalone.xml o domain.xml dopo la fine di il tag </extensions> (sembra che hai già fatto questo passo ;-):

<system-properties> 
     <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
     <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 
</system-properties> 

Inoltre hai a decodificare manualmente l'URI o il parametro con l'aiuto dell'oggetto java.net.URIEncoder:

String param = URLDecoder.decode(request.getParameter("text"), "UTF-8"); 

BalusC ha uno interesing post in his blog a riguardo.

Infine, una seconda soluzione, se si desidera evitare di utilizzare le opzioni precedenti: hai considerato l'utilizzo del metodo POST anziché quello GET?

Spero che aiuti.

+0

Ciao, grazie per la risposta; La prima soluzione che ho già provato, non ha funzionato. L'uso del POST non ha senso nel mio caso, perché è una ricerca e voglio che gli utenti possano copiare l'URL. Ho anche provato la tua seconda soluzione e anche il bug persiste. Piuttosto raccapricciante ... Grazie – caarlos0

+1

Ciao Caarlos, ho risposto a memoria, ma ero un po 'curioso del tuo problema, e ora ho preparato un esempio: ho riprodotto il tuo problema e finalmente l'ho fatto funzionare, e la soluzione funziona sia in Jboss 5.x che in 7. Il fatto è che le prime due soluzioni che ho dato sono davvero una soluzione unica, quindi per farlo funzionare devi definire le proprietà dei sistemi, e inoltre hai per decodificare il parametro. Ho modificato la risposta. – Toni

+0

Grazie, considererò che = D – caarlos0

2

Ho risolto il problema creando un filtro che imposta sia la codifica di richiesta che di risposta su UTF-8.

Abbastanza hacky, ma funziona.

+0

Sì, sto usando JBoss EAP 6.1 e ho dovuto usare 'request.setCharacterEncoding (" UTF-8 ")' oltre all'impostazione delle proprietà 'catalina. *' – tbrugz

1

Non ho abbastanza reputazione per aggiungere un commento a the answer by Toni S. Magraner, quindi scriverò qui.

request.getParameter ("testo") esegue già la decodifica dell'URL. Chiamando URLDecoder.decode() di nuovo si otterrà una doppia decodifica che probabilmente non farà ciò che si desidera. Un esempio:

logger.error("p1:"+request.getParameter("p1")); 

Chiamarlo con

http://localhost/test?p1=ku%2fki%44__%33X%C3%A9X 

stampe:

p1:ku/kiD__3XéX 
0

Lo standalone.xml o la configurazione domain.xml non funziona per me.

Su jboss-as-7.1.1.Final basta aggiungere questa linea a standalone.conf, questo file vive sotto la directory bin:

JAVA_OPTS = "$ JAVA_OPTS -Dorg.apache.catalina.connector.URI_ENCODING = UTF-8"

da: JBOSS 7 encoding not working as expected