Tomcat 9.0遇到java.lang.IllegalArgumentException: Invalid character found in the request target.

遇到这个问题一般是URL的不安全字符导致。例如下面这个URL。其中只用了 | 这个符号。导致发生了错误。

http://localhost:8080/SpringMVC/pages/back/message/message_delete.action?ids=1|2|3|4|5

网上提供了好几种解决方案:
1、stackoverflow里面这个回答和我的问题一样。但是当我修改完之后,在Tomcat9.0里并不能生效:https://stackoverflow.com/questions/41053653/tomcat-8-is-not-able-to-handle-get-request-with-in-query-parameters/44005213#44005213

2、替换为低版本的Tomcat,问题解决

3、对URL进行编码

4、使用指定的安全字符,参考:https://blog.youkuaiyun.com/ezreal_king/article/details/72654157


个人博客链接:xvanning.cn

15:44:58 [main] DEBUG o.s.b.d.LoggingFailureAnalysisReporter - Application failed to start due to an exception org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under &#39;server.tomcat.relaxed-query-chars&#39; to java.util.List<java.lang.Character> at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:387) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:347) at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$4(Binder.java:472) at org.springframework.boot.context.properties.bind.Binder$$Lambda$65/841262455.bindProperty(Unknown Source) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:98) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:86) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:62) at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:476) at org.springframework.boot.context.properties.bind.Binder$$Lambda$66/1955021259.get(Unknown Source) at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:590) at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:576) at org.springframework.boot.context.properties.bind.Binder$Context.access$300(Binder.java:537) at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:474) at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:414) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343) at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$4(Binder.java:472) at org.springframework.boot.context.properties.bind.Binder$$Lambda$65/841262455.bindProperty(Unknown Source) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:98) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:86) at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:62) at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:476) at org.springframework.boot.context.properties.bind.Binder$$Lambda$66/1955021259.get(Unknown Source) at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:590) at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:576) at org.springframework.boot.context.properties.bind.Binder$Context.access$300(Binder.java:537) at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:474) at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:414) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:332) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:262) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:249) at org.springframework.boot.context.properties.ConfigurationPropertiesBinder.bind(ConfigurationPropertiesBinder.java:96) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.bind(ConfigurationPropertiesBindingPostProcessor.java:89) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:78) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$223/918899286.getObject(Unknown Source) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:536) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$223/918899286.getObject(Unknown Source) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:673) at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.getWebServerFactoryCustomizerBeans(WebServerFactoryCustomizerBeanPostProcessor.java:87) at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.getCustomizers(WebServerFactoryCustomizerBeanPostProcessor.java:78) at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.postProcessBeforeInitialization(WebServerFactoryCustomizerBeanPostProcessor.java:70) at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.postProcessBeforeInitialization(WebServerFactoryCustomizerBeanPostProcessor.java:58) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$223/918899286.getObject(Unknown Source) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:219) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:182) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:585) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) at com.soft863.BlsApplication.main(BlsApplication.java:22) Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Character] for value [|{}[]]; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type &#39;java.lang.String&#39; to required type &#39;java.lang.Character&#39;; nested exception is java.lang.IllegalArgumentException: String [|{}[]] with length 5 cannot be converted to char type: neither Unicode nor single character at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:47) at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192) at org.springframework.boot.convert.DelimitedStringToCollectionConverter.lambda$convert$0(DelimitedStringToCollectionConverter.java:72) at org.springframework.boot.convert.DelimitedStringToCollectionConverter$$Lambda$128/69062746.apply(Unknown Source) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) at org.springframework.boot.convert.DelimitedStringToCollectionConverter.convert(DelimitedStringToCollectionConverter.java:74) at org.springframework.boot.convert.DelimitedStringToCollectionConverter.convert(DelimitedStringToCollectionConverter.java:62) at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41) at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192) at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:109) at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:100) at org.springframework.boot.context.properties.bind.IndexedElementsBinder.convert(IndexedElementsBinder.java:145) at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindValue(IndexedElementsBinder.java:95) at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:83) at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:70) at org.springframework.boot.context.properties.bind.CollectionBinder.bindAggregate(CollectionBinder.java:48) at org.springframework.boot.context.properties.bind.AggregateBinder.bind(AggregateBinder.java:56) at org.springframework.boot.context.properties.bind.Binder.lambda$bindAggregate$3(Binder.java:438) at org.springframework.boot.context.properties.bind.Binder$$Lambda$73/888557915.get(Unknown Source) at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:590) at org.springframework.boot.context.properties.bind.Binder$Context.access$100(Binder.java:537) at org.springframework.boot.context.properties.bind.Binder.bindAggregate(Binder.java:438) at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:399) at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343) ... 81 common frames omitted Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type &#39;java.lang.String&#39; to required type &#39;java.lang.Character&#39;; nested exception is java.lang.IllegalArgumentException: String [|{}[]] with length 5 cannot be converted to char type: neither Unicode nor single character at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:79) at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:45) at org.springframework.boot.context.properties.bind.BindConverter$TypeConverterConverter.convert(BindConverter.java:221) at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41) ... 112 common frames omitted Caused by: java.lang.IllegalArgumentException: String [|{}[]] with length 5 cannot be converted to char type: neither Unicode nor single character at org.springframework.beans.propertyeditors.CharacterEditor.setAsText(CharacterEditor.java:89) at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) ... 115 common frames omitted 15:44:58 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - *************************** APPLICATION FAILED TO START *************************** Description: Failed to bind properties under &#39;server.tomcat.relaxed-query-chars&#39; to java.util.List<java.lang.Character>: Property: server.tomcat.relaxed-query-chars Value: "|{}[]" Origin: class path resource [application.yml] - 7:26 Reason: failed to convert java.lang.String to java.lang.Character (caused by java.lang.IllegalArgumentException: String [|{}[]] with length 5 cannot be converted to char type: neither Unicode nor single character) Action: Update your application&#39;s configuration Disconnected from the target VM, address: &#39;127.0.0.1:63617&#39;, transport: &#39;socket&#39; Process finished with exit code 1
最新发布
11-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值