Tomcat中的Grails请求参数编码问题

Posted

技术标签:

【中文标题】Tomcat中的Grails请求参数编码问题【英文标题】:Grails request parameters encoding issue in Tomcat 【发布时间】:2012-02-29 01:50:35 【问题描述】:

我的 grails 应用无法正确解码请求参数。

在 config.groovy 中:

grails.views.gsp.encoding = "UTF-8" grails.converters.encoding = "UTF-8"

我所有的 gsp 在 page 指令中使用 contentType="text/html; charset=UTF-8" 以及在 head 元素中使用 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

但是,当我从控制器中的 param 对象接收到发布的参数时,应用程序只会打印垃圾...

我使用的是通过 Tomcat 5 部署的 Grails 1.3.7 版本。除了 tomcat 之外的其他已安装插件:

休眠 1.3.7 jQuery 1.7.1 弹簧安全核心 1.2.6 webxml 1.4

编辑:通过进一步调试,我注意到该应用程序将在码头中运行良好。因此我怀疑它一定是一个tomcat问题。我的问题与to this post 类似(可惜我没有使用 Shiro 插件)。

有人可以帮忙吗?

【问题讨论】:

数据库中的内容是垃圾,还是只是打印出来的内容?你有没有安装 webxml 插件(运行grails list-plugins --installed)? 从进一步调试来看,问题出在 Web 层。提交的值到达控制器时已经是垃圾了。 我安装的插件有:hibernate 1.3.7、tomcat、jquery 1.7.1、spring-security-core 1.2.6、webxml 1.4 【参考方案1】:

你需要将URIEncoding='UTF-8'添加到conf/server.xml中的Connector元素,例如

<Connector port='8080' protocol='HTTP/1.1' connectionTimeout='20000'
           redirectPort='8443' URIEncoding='UTF-8' />

这里有描述:https://wiki.apache.org/tomcat/FAQ/CharacterEncoding

【讨论】:

感谢您的回复。我的问题实际上是 POST 参数。如果我正确理解了常见问题解答,URIEncoding 仅适用于 GET 参数。尽管如此,我试了一下,但也没有用。这可能是一个很长的镜头,但它可能是我生成的 web.xml 中过滤器的顺序吗?在那里我按顺序有以下过滤器:springSecurityFilterChain -> sitemesh -> charEncodingFilter -> urlMapping -> hiddenHttpMethod -> grailsWebRequest 抱歉,我没有发现您正在使用 webxml 1.4 - 您需要使用 1.4.1 来修复此 charEncodingFilter 订单错误。您还需要升级到更高版本的 Spring Security Core,因此您应该使用 1.2.7.2(最新)。 感谢伯特的所有帮助。 @BurtBeckwith 有没有办法直接在 Grails 中将此 URIEncoding 设置为 UTF-8,这样我们就不必将此更改应用于每个服务器中的 tomcat? 不,您不能从 war 文件中配置服务器。【参考方案2】:
edit application.properties
add(update) line:
plugins.webxml=1.4.1

【讨论】:

【参考方案3】:

由于没有最终结论,我想分享我在相同情况下的经验。 Here 可以找到更多讨论。

我的情况是,我在本地 pc 上的 windows 下有开发环境,包括本地 mysql。生产环境 - Apache 后面的 Centos 6、MySQL、Tomcat 6。

在开发环境中 - 一切正常,但在生产环境中 - 没有。 唯一对我有帮助的东西 - 还设置了 autoreconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8 来推荐 Tomcat URIEncoding='UTF-8'

所以,问题出在正确的 java Driver for MySQL 设置中。

【讨论】:

以上是关于Tomcat中的Grails请求参数编码问题的主要内容,如果未能解决你的问题,请参考以下文章

简单整理编码问题

tomcat 对请求参数中的加号是如何处理的

get请求中url传参中文乱码问题

Grails 4、Ubuntu 20、嵌入式 Tomcat - 请求中没有多部分文件

request请求参数乱码

get请求中url传参中文乱码问题--集锦