java utf 8转义_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中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])**

然后,我们看了一下请求报文,的确存在敏感字符,突然间,就云消雾散了,经整理,需要添加一个配置方可解决

2de5b6b56b38bed30f5a91724c7411d0.png

代码如下:

import org.apache.catalina.connector.Connector;import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @日期: 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;    }}

另外:"\"<>[\\]^`{|}" 这个包含的特殊符号,如果不能满足需要,可以自己增加,如#等。

其他解决方法:降低tomcat版本。

注:如果不是使用的SpringBoot内置版本,需要在tomcat的配置文件中添加以下配置信息,并重新启动。

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

欧克,今天的小笔记到此结束,喜欢的小伙伴点个关注。

【头条号】:Java点滴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值