首页 > 其他分享 >基于springboot的restful接口的请求地址含有特殊字符被项目自带tomcat拦截问题

基于springboot的restful接口的请求地址含有特殊字符被项目自带tomcat拦截问题

时间:2023-02-25 11:07:39浏览次数:30  
标签:00 01 springboot tomcat filter org restful 请求


写了一个基于springboot的restful接口,但按照设计,请求地址十分古怪,类似这样:

http://192.168.10.8:8080/?skey=fb5e8ea9249c4ac19dad5e2a341e09ce&filter[]=A3011300500,eq,35041&filter[]=A3001200400,ge,2021-01-01 00:00&filter[]=A3001200400,le,2021-02-01 00:00&satisfy=AND

可以发现,地址后面的参数中,含有多个"filter[]",里面有一对方框。结果请求的时候,根本无法到达控制器。浏览器直接显示:HTTP Status 400 – Bad Request。

基于springboot的restful接口的请求地址含有特殊字符被项目自带tomcat拦截问题_spring

写了拦截器、过滤器,想着将请求拦截下来,修改参数名。但请求也根本未到达这一层。不过请求的时候,程序是有反应的,给出了报错信息:

java.lang.IllegalArgumentException: Invalid character found in the request target [/?skey=fb5e8ea9249c4ac19dad5e2a341e09ce&filter[]=A3011300500,eq,35041&filter[]=A3001200400,ge,2021-01-01 00:00&filter[]=A3001200400,le,2021-02-01 00:00&satisfy=AND ]. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:494) ~[tomcat-embed-core-9.0.60.jar:9.0.60]

估计是自带的tomcat版本是9,会拦截掉特殊字符。解决方法是将tomcat的配置注册到springboot启动类中:

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;

@Configuration
public class TomcatConfig {

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

参考文章
​解决springboot项目请求出现非法字符问题 java.lang.IllegalArgumentException:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986​​


标签:00,01,springboot,tomcat,filter,org,restful,请求
From: https://blog.51cto.com/leftfist/6084938

相关文章

  • nginx、http、tomcat虚拟主机格式
    httpd<virtualhost *:80>servername ​​www.a.com​​documentroot /var/www/html</virtualhost>nginxserver{listen 80;server_name ​​www.a.com;​​root html;i......
  • SpringBoot-使用链接字符串动态创建SqlSessionFactory执行任意SQL脚本
    SpringBoot-使用链接字符串动态创建SqlSessionFactory执行任意SQL脚本引言SpringBoot大大减少了使用XML配置的复杂性,但是想通过代码去实例化一个对象有点儿无从下手的感觉。......
  • 利用Github Action自动化部署SpringBoot项目
    环境准备一台拥有公共IP的1核1G以上配置的Linux云服务器。笔者选用的Linux发行版为CentOSLinuxrelease7.0.1406(Core)已安装好JDK8与Maven。若是还未安装,可以参考以......
  • linux中安装部署启动Tomcat
    创建tomcat文件,并进入tomcatmkdirtomcatcdtomcat将已经下载好的tomcat压缩包拖入其中并解压tar-zxvfapache-tomcat-8.5.43.tar.gz进入apache-tomcat-8.5.43cda......
  • 基于SpringBoot+Vue开发的前后端分离博客项目一一后端开发
    @目录前言一、Java后端接口开发1.新建SpringBoot项目1.1开发技术栈:1.2pom中jar包引入:1.3配置文件:2.整合mybatisPlus2.1引入pom的jar包2.2配置分页插件、代码生成......
  • SpringBoot31 - 监控
    监控​ 在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐步完善,软件的功能变得越来越复杂,功能不能得到有......
  • SpringBoot29 - RocketMQ
    SpringBoot整合RocketMQ​ RocketMQ由阿里研发,后捐赠给apache基金会,目前是apache基金会顶级项目之一,也是目前市面上的MQ产品中较为流行的产品之一,它遵从AMQP协议。安装......
  • SpringBoot30 - 整合Kafka
    SpringBoot整合Kafka安装​ windows版安装包下载地址:https://kafka.apache.org/downloads​ 下载完毕后得到tgz压缩文件,使用解压缩软件解压缩即可使用,解压后得到如下......
  • SpringBoot入门
    SpringBoot提供2Controller与@RestController两者分别用于标记此类负责接收及处理HTTP请求路径映射:@RequestMapping的value属性用于匹配URL映射,value支持简单表达式@Re......
  • springboot如何编写
    最佳实践引入场景依赖https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter1查看自动配置了那些(选)1.自行......