Путь запроса Java содержит специальные символы В цели запроса обнаружен недопустимый символ Допустимые символы определены в RFC

В последнее время в процессе разработки проекта из-за разнообразия данных, загружаемых в базу данных, в идентификаторе появляются специальные символы, такие как: , который {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;
    }

}

Спецсимволы, которые необходимо обрабатывать, добавлены выше, чтобы интерфейс доступа не сообщал об ошибке.

Guess you like

Origin blog.csdn.net/quanqxj/article/details/106856872