springboot中报错Invalid character found in the request的解决

目录
  • 解决Invalid character found in the request问题
    • 原因
  • springboot项目报错问题
    • 原因
    • 有两种解决方法

解决Invalid character found in the request问题

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

原因

SpringBoot 2.0.0 以上都采用内置tomcat8.0以上版本,而tomcat8.0以上版本遵从RFC规范添加了对Url的特殊字符的限制,url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~四个特殊字符以及保留字符( ! * ’ ( ) ; : @ & = + $ , / ? # [ ] ) (262+10+4+18=84)这84个字符,请求中出现了{}大括号或者[],所以tomcat报错。

设置RelaxedQueryChars允许此字符(建议),设置requestTargetAllows选项(Tomcat 8.5中不推荐)。

根据Tomcat文档,下面提供一种方法来设置松弛的QueryChars属性*

在启动类中添加

    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                connector.setProperty("relaxedQueryChars", "|{}[]");
            }
        });
        return factory;
    }

springboot项目报错问题

java.lang.IllegalArgumentException:Invalid character found in the request target.

原因

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。

springboot默认集成了tomcat,tomcat然后当你前端发送请求,请求参数中有保留的特殊字符时,就会报如下错

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

有两种解决方法

  • 一种降低tomcat版本(不建议),这里就不写了
  • 另一种是在SpringBoot中增加tomcat配置

在config中新建一个TomcatConfig类

@Configuration
public class TomcatConfig {
    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
            connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
        });
        return factory;
    }
}

然后重启项目测试,问题解决

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springboot 错误处理小结

    在 java web开发过程中,难免会有一些系统异常或人为产生一些异常.在 RESTful springboot 项目中如何优雅的处理? 分析:在RESTful 风格的springboot 项目中,返回的都是 body 对象,所以定义一个结果基类,其中包含 status,message,data(请求方法的返回结果),是比较合适的. 如果定义多个异常类进行处理,会比较麻烦.比如StudentNotExistsException.StudentExistsException...等,并且不能指定错

  • springboot处理异常的5种方式

    目录 1.自定义错误页面 2.@ExceptionHandle 注解处理异常 3.@ControllerAdvice+@ExceptionHandler 注解处理异常 4.配置 SimpleMappingExceptionResolver 处理异常 5.自定义 HandlerExceptionResolver 类处理异常 通用异常处理: 1.自定义异常枚举类 2.自定义异常类 3.自定义异常结果处理类 4.全局异常处理 程序的异常:Throwable 严重错误问题:Error     我们不处理

  • tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)

    1.情景展示 tomcat 日志时不时会报出如下异常信息,到底是怎么回事? java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986     at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine

  • springboot中报错Invalid character found in the request的解决

    目录 解决Invalid character found in the request问题 原因 springboot项目报错问题 原因 有两种解决方法 解决Invalid character found in the request问题 Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 原因 SpringBoot 2.0.0 以上都采用

  • Nginx中报错:Permission denied与Connection refused的解决

    本文主要记录一下各种环境中 nginx 的错误和解决办法,下面话不多说了,来看看详细的介绍吧. 一.13: Permission denied Nginx错误: 2017/04/19 14:46:46 [crit] 4172#0: *671 open() "/data/vhosts/xunlei.com/test/" failed (13: Permission denied), client: 192.168.35.54, server: www.test.com, request:

  • Postgresql在mybatis中报错:操作符不存在:character varying == unknown的问题

    错误: 操作符不存在: character varying == unknown , Hint: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换. 在Mybatis条件查询时,动态SQL的一个错误,sql写的也不多,没仔细看所以一直找不到错误,网上也找不到类似的错误,结果是低级错误... <div> <form:select path="finished" class="col-xs-12 form-control m-b"&g

  • 解决springboot依赖包中报错unknown的问题

    目录 springboot依赖包中报错unknown 1.先说说版本吧 2.问题描述 3.找到redis的jar版本 4.分享一个小技巧 springboot项目报错UnknownError springboot依赖包中报错unknown 1.先说说版本吧 springboot使用2.0.3版本 2.问题描述 直接上图片: 原先除了redis报错以外,还有commons-beanuitls也报一样的问题,我从本地仓库中将unknown文件夹删除,重新reimport也一样,后来百思不得其姐,决定

  • Mybatis出现ORA-00911: invalid character的解决办法

    今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查了一下SQL,发现都书写正确啊,复制到plsql上执行也都没问题,这什么原因呢? 注意:这里说的是用navicat导出查询数据的时候报错:ORA-00911: invalid character 主要原因是这里的sql是不允许带最后的分号的,删掉就好了 在plsql等工具中写完后习惯性的打上;号,在复制时也要注意啊!! 以上所述是小编给大家介绍的Mybati

  • 使用mybatis-plus报错Invalid bound statement (not found)错误

    近期使用Springboot集成Mybatisplus,执行insert时一直报错,提示错误如下: Invalid bound statement (not found): xx.insert mapper继承BaseMapper: BaseMapper有insert方法如下: service调用mapper.insert(对象)报错 某度查找资料均不能解决问题,最终经查阅官方文档比对得知是缺少jar包导致.在pom.xml中引入: <dependency> <groupId>co

  • javascript在myeclipse中报错的解决方法

    jqueryjQueryJQUERYJqueryJQueryjquery报错jsJSJsmyeclipseMyEclipseMyeclipse 1.选中报错的jquery文件"jquery-1.2.6.min.js". 2.右键选择 MyEclipse-->Exclude From Validation. 3.再右键选择 MyEclipse-->Run Validation 即可.

  • python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决

    在学习python语言中用json库解析网络数据时,我遇到了两个编译错误:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes:和json.decoder.JSONDecodeError: Expecting value:.费了一些时间才找到原因,在此记录总结,希望能对学习python的同学有所帮助. 我运行的程序初始如下: import json data=''' { 'name' : '

  • 微信二次分享报错invalid signature问题及解决方法

    基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享.问题出在用户B收到的分享链接与用户A打开的链接不同 A用户的链接为 http://test.com/test.html B用户收到的连接 http://test.com/test.html&from=singlemessage from=singlemessage是微信客户端为了区分分享来源再链接后自动添加的标记,再次分享时,需要在js代码中对自动获取的连接进行encodeURICo

随机推荐