В последнее время в процессе разработки проекта из-за разнообразия данных, загружаемых в базу данных, в идентификаторе появляются специальные символы, такие как: , который {D27E2B76B6D84143AB0F3049570A4F38}
содержит {}
символы, а адрес запроса http://localhost:8050/api/task/detail?id={D27E2B76B6D84143AB0F3049570A4F38}
400 сообщает об ошибке на странице результатов, а в фоновом режиме появляется следующее сообщение об ошибке:
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:468) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) [tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) [tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.30.jar:9.0.30]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_202]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_202]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.30.jar:9.0.30]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_202]
Причина этой ошибки: когда мы взаимодействуем, параметры, переданные в URL-адресе, содержат {}
[]
:
специальные символы, такие как d, и запросы, содержащие эти символы в более высоких версиях tomcat, будут перехвачены.
Проверьте соответствующую информацию в Интернете, там много записанных решений:
1. Уменьшить версию tomcat
2. Удалить специальные символы в URL
3. Использовать POST для отправки
4. Изменить файл conf/catalina.properties и перезапустить службу
五.springboot工程中增加一个tomcat 配置,或者将webServerFactory方法加入到springboot启动类
Но это не применимо ко мне, причина в следующем:
способ 1, несколько проектов запущены в официальной среде, понижение версии может привести к несовместимости других компонентов, способ 2: все данные в проекте проталкиваются
третьей стороной, и его данные не могут быть изменены,
в конце концов, самый быстрый и эффективный способ решить эту проблему - GET
добавить метод webServerFactory в класс запуска Springboot, Код конфигурации выглядит следующим образом:方法五
import org.apache.catalina.connector.Connector;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
//将webServerFactory方法加入到springboot启动类
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}
Спецсимволы, которые необходимо обрабатывать, добавлены выше, чтобы интерфейс доступа не сообщал об ошибке.