javautf8转义_Tomcat8及以上特殊字符转义问题
之前与前端同事,调试⼀个接⼝,⼀直会报⼀个异常
java.lang.IllegalArgumentException: Invalid character found in the request target
有点⼩崩溃,当时只是归结为是不是请求报⽂和接受格式不⼀致,后来上⽹查了查,发现⽅向错了。该异常的原因在于,后端项⽬是⽤内置tomcat启动的,版本为tomcat9,但是tomcat版本⼤于8.0对请求URL做了严格的过滤, RFC 3986规范定义了Url中只允许包含英⽂字
母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [
])**
然后,我们看了⼀下请求报⽂,的确存在敏感字符,突然间,就云消雾散了,经整理,需要添加⼀个配置⽅可解决
代码如下:
import org.tor.Connector;import org.springframework.at.TomcatServletWebSe @⽇期: 2021/1/18 * @作者: dd * @描述: ⾮法字符转义-tomcat8及以
上 */@Configurationpublic class TomcatConfig{    @Bean    public TomcatServletWebServerFactory webServerFactory()
{        TomcatServletWebServerFactory factory =
new TomcatServletWebServerFactory();        factory.addConnectorCustomizers((Connector connector) ->
{            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");            connector.setProperty("relaxedQueryChars", "\"<> [\\]^`{|}");        });        return factory;    }}
另外:"\"<>[\\]^`{|}" 这个包含的特殊符号,如果不能满⾜需要,可以⾃⼰增加,如#等。
url编码和utf8区别其他解决⽅法:降低tomcat版本。
注:如果不是使⽤的SpringBoot内置版本,需要在tomcat的配置⽂件中添加以下配置信息,并重新启动。
at.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
欧克,今天的⼩笔记到此结束,喜欢的⼩伙伴点个关注。
【头条号】:Java点滴

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。