JBoss AS 7.1 -请求参数编码

hts6caw3  于 2022-11-08  发布在  其他
关注(0)|答案(5)|浏览(203)

我有UTF-8格式的所有内容,包括内容类型、数据库、文件、java等所有内容(除非我遗漏了什么)。
我跟踪了很多stackoverflow的答案,JIRAs,博客等,但是,它仍然失败。
问题本身是这样的:
当我提交给http://localhost:8080/app/searh?text=café时,让我们假设,调试,我的request.getParameter("text")总是错误的,类似于caférequest.getCharachterEncoding()给我null(?)。
查看请求标头,我得到以下内容:

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

以及响应头:

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

都是UTF-8我就是不明白。
我尝试在standalone.confJAVA_OPTS变量中传递-Dfile.encoding=UTF-8 -Dfile.io.encoding=UTF-8 -DjavaEncoding=UTF-8,尝试将

<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"/>

在我的standalone.xml中。这些都不能解决问题。
我可以尝试做些什么来解决这个问题?
先谢谢你。
顺便说一句:是一个JBoss AS 7.1.1。

jjjwad0x

jjjwad0x1#

我遇到了同样的问题,但是在Jboss 5.1中,我通过向HTTP连接器(在jbossweb/server.xml中)添加URIEncoding属性并手动解码URL/GET参数来解决这个问题。
但在Jboss 7中定义它的方式与以前的版本不同,但我稍微搜索一下,发现了这个link:基本上,您必须在standalone.xml或domain.xml文件中的</extensions>标记的末尾添加以下行(看起来您已经完成了这一步;- ):

<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>

此外,您必须在java .NET.URIEncoder对象的帮助下手动解码URI或参数:

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

BalusC在他的博客中有一篇有趣的文章。
最后,如果您想避免使用前面的选项,则可以使用第二种解决方案:您是否考虑过使用POST方法而不是GET方法?
希望能帮上忙。

aamkag61

aamkag612#

我通过创建一个将请求和响应编码都设置为UTF-8的过滤器解决了这个问题。
挺老套的,但很管用。

ewm0tg9j

ewm0tg9j3#

我没有足够的声誉来添加评论the answer by Toni S. Magraner,所以我会在这里写。

  • request.getParameter(“text”)* 已经进行了URL解码。再次调用 URLDecoder.decode() 将给予双重解码,这可能无法完成您想要的操作。例如:
logger.error("p1:"+request.getParameter("p1"));

跟注

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

印刷品:

p1:ku/kiD__3XéX
2w2cym1i

2w2cym1i4#

standalone.xml或domain.xml配置对我不起作用。
在jboss-as-7.1.1.Final上,只需将以下行添加到standalone.conf中,该文件位于目录bin下:
"$JAVA_OPTS-数据库.Apache. Catalina .连接器.统一资源标识符_编码=UTF-8”
从:JBOSS 7 encoding not working as expected

sg24os4d

sg24os4d5#

我们在POST请求中也遇到了类似的问题,请求主体中有参数:

p1=v2&text=café

我们解决了客户端在请求中添加标头的问题:

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

相关问题