【编码】tomcat8的get请求包含未编码的中文会报400

2023-12-26 16:42:23

一 背景

世纪初的老项目,使用jsp-servlet,jdk5,部署在tomcat5上。

其中有用到js模态弹窗,window.showModelessDialog(url,window,style)

其中url带有中文提示语,未进行编码处理

现迁移到jdk8,tomcat8.5.96环境

其它还好,但这个弹框内容为400,包含不符合规范的字符

二 原因(推测)

搜到tomcat高版本(7之后)增加了get请求的字符规范校验,包括括号等特殊字符,源码还能看到一堆检查。而且不止那些博客文档提到的{}|等符号,中文乱码、中文符号也会被阻断。没找到屏蔽这些校验的方式

三 尝试过的方案

1 其它文档博客提到的

tomcat/conf/server.xml? ?connect标签增加 URLEncoding="utf-8"? useBodyEncodingForURI="true" relaxedQueryChars="{}|" relaxedPathChars="{}|" 等等,分别表示请求按此编码、启用uri编码、忽略特殊字符。但实际并没效果,不知道是没包含中文乱码字符还是这配置就没用

2 tomcat/conf/catalina.propertis? 放开allow,但试着也没卵用

官方文档:Apache Tomcat 8 Configuration Reference (8.5.97) - System Properties

3 conf/web.xml 或者项目的 webapps/xxx/WEB-INF/web.xml? 里面的编码过滤器,改为utf-8

4 jsp顶头有?<%@page contentType="text/html;charset=GBK" %> ,不过好像不影响?这影像是jsp展示在浏览器时指定浏览器的编码

====================================

其中123都是为了让tomcat对请求进行一次编码,不过试下来没效果

以上怎么改都没什么用,但为gbk时全400,改成utf8好歹出现过乱码展示而不是400

======================================

四 最后解决

按三中123改完,4无所谓

然后在js jsp里找到调模态的地方,给url加上 encodeURI(url) 进行编码,接受的jsp不用改了

如果接受还是乱码,就给接受方加个解码

对于老项目改动很大,不过现在的容器这么设计了,不想改代码就改tomcat源码罢

还有这篇挺好的?页面跳转之转发和重定向+Servlet中文乱码问题_java 重定向后中文乱码-CSDN博客

文章来源:https://blog.csdn.net/misakakagami/article/details/135220398
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。