java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

异常如下:

 出现原因:

由于请求了无效字符串,使系统访问不到正确的页面或者错误的请求,例如状态码400提示的一样网页提示错误类型400指的是你访问的页面域名不存在或者请求错误。400是一种是HTTP状态码,400 Bad Request。是在打开网页时服务器返回到客户端的一种状态码。显示在客户端的也就是400页面。400页面是当用户在打开网页时,返回给用户界面带有400提示符的页面。 简单来说就是当网页不存在(例如已经被删除了),打开就会出现这个提示。”

我这个是尝试访问路径时,传递了多种特殊字符,例如%\|[{}]等,看网上推荐的方案是:

  1. 检查输入请求,以了解所有预期的参数和值是否存在。 当参数缺失时,发出适当的错误消息,或使用缺省值。
  2. 应用程序应验证其输入是否由有效字符组成(解码后)。 例如,应拒绝包含空字节(编码为 %00)、单引号、引号等的输入值。
  3. 确保值符合预期范围和类型。 如果应用程序预期特定参数具有特定集合中的值,那么该应用程序应确保其接收的值确实属于该集合。 例如,如果应用程序预期值在 10..99 范围内,那么就该确保该值确实是数字,且在 10..99 范围内。
  4. 验证数据是否属于提供给客户端的集合。
  5. 请勿在生产环境中输出调试错误消息和异常。
  6. 将所有的错误信息设定统一的返回页面。

个人解决方案:

由于不想再重构代码方式,我直接采用编辑Tomcat配置进行过滤,在Tomcat目录conf/server.xml下<Connector>标签内添加过滤字符配置:

 relaxedPathChars="|{}[],%"   relaxedQueryChars="|{}[],%

标红的位置可根据自己要过滤的字符进行调整

 <Connector port="8080" protocol="HTTP/1.1"  relaxedPathChars="|{}[],%"
      relaxedQueryChars="|{}[],%" 
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" server="wws1.0"/>

感谢参考资料:

在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

java Web中解决超链接中含有中文的乱码问题 或 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

Later version of Tomcat hit into "Invalid character found in the request target" when subscribing to RSS feeds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值