web-dev-qa-db-fra.com

Comment faire en sorte que Tomcat accepte les crochets non échappés dans les URL?

Je n'avais jamais utilisé Tomcat auparavant, mais j'ai récemment hérité d'un projet JSP et je dois maintenant le faire fonctionner. J'ai réussi à installer Tomcat 8.0 localement dans Eclipse et tout fonctionne correctement. J'ai également installé Tomcat 8.0 sur un VPS Ubuntu. L'application fonctionne correctement, à l'exception d'un petit problème de gestion des URL.

L'application côté client génère des URL avec des crochets et des accolades non échappés dans les paramètres, comme ceci:

GET /saveItems.json?items=[{%22json%22:%22here%22}]

Autant que j'aimerais changer l'application côté client, je ne peux pas. J'ai juste besoin de faire fonctionner ce backend.

Ma copie locale de l'application gère cette amende. Sur le serveur, cependant, j'obtiens cette erreur:

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(AbstractNioInputBuffer.Java:286)
    at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1009)
    at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:672)
    at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1504)
    at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1460)
    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:748)

Je cherchais un réglage qui puisse avoir une incidence sur cela, sans aucune chance. Qu'est-ce que j'oublie ici?

6
cbnz

Je rend cela possible en éditant $ CATALINA_HOME\conf\server.xml

Ancienne valeur: <Connector ... protocol="HTTP/1.1"... />

Nouvelle valeur: <Connector ... protocol="HTTP/1.1"... relaxedQueryChars='[]|{}^&#x5c;&#x60;&quot;&lt;&gt;' />

6
Latif

Tomcat 8.0.39/8.5.9/7.0.73 ajoute des vérifications supplémentaires pour les caractères valides à l'analyse de la ligne de requête HTTP. Selon cette exigence , version 8.0.42/8.5.12/7.0.76 apportez des modifications pour autoriser certains caractères non valides.
{, } et | sont autorisés si le caractère présent dans la valeur de la propriété système Tomcat.util.http.parser.HttpParser.requestTargetAllow.

Vous pouvez ajouter la propriété système Tomcat.util.http.parser.HttpParser.requestTargetAllow={} pour éviter cette erreur. Une des solutions est l'édition $CATALINA_HOME\conf\catalina.properties

5
Beck Yang

Je reçois cette erreur lorsque j'essaie de GET URL avec un caractère spécial.

Java.lang.IllegalArgumentException: caractère non valide trouvé dans la cible de la demande .

En modifiant le paramètre de connecteur dans server.xml, , Nous pouvons analyser un caractère spécial dans Tomcat version 9.

Connector port="80" protocol="HTTP/1.1" relaxedQueryChars="\ { } |" 
2
pravin patil