今天在Fitler中使用了 RequestContext 对request进行了自动编码,然后测试http get 方式传递中文参数,发现 RequestProxy 中的参数编码和 Tomcat 中配置的 URIEncoding=“UTF-8” 冲突了:
如果Tomcat 不配置 URIEncoding,则Get方式传递中文木有问题;
但是如果Tomcat配置了URIEncoding,则Get方式传递中文是乱码;
有没有办法可以让 RequestProxy 和 URIEncoding 两者同时存在啊?或者是否可以获取到 Tomcat 中配置的 URIEncoding 参数值?求大牛指点一下。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
可以通过JMX取,不用开JMX的远程访问也能行。端口你考虑从request里面应该是能取出来的。
/**
* 返回Tomcat设置在server.xml的Connector上的URIEncoding属性值,如果无法获取或没有设置返回null
*
* @param port
* HTTP监听端口,用于对应Connector
* <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a>
*/
public static String getConnectorURIEncoding(int port) {
String result = null;
// 获取当前环境下的JMX MBeanServer,Tomcat启动的时候会创建一个(通常环境下也只有一个MBeanServer)
List<MBeanServer> serverList = MBeanServerFactory.findMBeanServer(null);
// 遍历MBeanServer找到要的MBean及对应的属性
for (MBeanServer server : serverList) {
// 获取MBean
try {
result = (String) server.getAttribute(ObjectName.getInstance("Catalina:type=Connector,port=" + port), "URIEncoding");
} catch (AttributeNotFoundException e) { // 指定的属性在 MBean中是不可访问的
// Do Nothing
} catch (InstanceNotFoundException e) { // 指定的 MBean未注册
// Do Nothing
} catch (MBeanException e) {
log.warning("MBeanException: " + e.getMessage());
} catch (ReflectionException e) {
log.warning("ReflectionException: " + e.getMessage());
} catch (MalformedObjectNameException e) {
log.warning("MalformedObjectNameException: " + e.getMessage());
}
if (result != null) { // 拿到值就跳出
break;
}
}
return result;
}