2017-10-12 4 views
0

Ich habe einen Anlegestegserver, der programmgesteuert konfiguriert ist. Ich habe ein Upgrade von 9.3.7 auf 9.4.7 durchgeführt und jetzt funktionieren Kontextpfade mit Leerzeichen nicht mehr.Anlegestelle 9.4 ServletContextHandler.setContextPath-Verhalten oder Anforderungsdaten ändern

So ServicePath = "/ Foo/Bar One Two" und Anforderungen haben richtige% 20 Leerzeichen ersetzen. Mein Protokoll zeigt eine Anfrage "" GET // localhost: 8180/foo/bar% 20One% 20Two/foobar HTTP/1.1" ..

Mein Server hat zwei identische Servlets mit dem einzigen Unterschied, der Kontextpfad

?

Was hat sich geändert Es könnte in der Art und Weise sein, die Ressource Pfad zum Servlet präsentiert

Mein Code den Kontextpfad Angabe wie folgt aussieht:.

ServletHolder holder = new ServletHolder(...); 
ServletContextHandler handler = new ServletContextHandler(); 
handler.setContextPath(servicePath); 
handler.setVirtualHosts(connectors); 
handler.addServlet(holder, "/*"); 
contextHandlers.addHandler(handler); 

So fordern jetzt org.eclipse.jetty.server .Request hat URL-Informationen, die codiert sind, wenn sie vorher nicht vorhanden waren.

  1. Ist die URL (originalURI) in Anforderung org.eclipse.jetty.server.Request garantiert vollständig codiert, egal was?
  2. Offensichtlich akzeptiert ServletContextHandler.setContextPath() uncodierte Pfade. Akzeptiert es beides?

Dank

+0

Es sieht aus wie request.getContextPath() gibt jetzt einen codierten Pfad zurück. Ist das garantiert? –

Antwort

0

stellte ich fest, dass Jetty 9.4 den Weg request.getContextPath geändert() reagiert. Es scheint jetzt einen codierten Pfad zurückzugeben.

Hinweis Experiment zeigt, dass ServletContextHandler.setContextPath() einen uncodierten Pfad akzeptiert.

Verwandte Themen