Erkennen die URI-Codierung automatisch im Tomcat
Habe ich eine Instanz von Apache Tomcat 6.x laufen, und ich möchte es zu interpretieren, den Zeichensatz für eingehende URLs ein wenig intelligenter als die Standard-Verhalten. Insbesondere möchte ich auf die Erreichung der folgenden Abbildung:
So%DFe => Soße
So%C3%9Fe => Soße
So%DF%C3%9F => (error)
Den bevavior ich will, könnte beschrieben werden als "try to decode byte-stream als UTF-8, und wenn es doesn T Arbeit angenommen, ISO-8859-1".
Einfach mit der URIEncoding
Konfiguration funktioniert nicht in diesem Fall. Also, wie kann ich Tomcat konfigurieren zu Kodieren die Anfrage, wie ich will?
Könnte ich zu schreiben, ein Filter, der nimmt den Wunsch (vor allem der query-string) und re-kodiert in die Parameter. Wäre das der Natürliche Weg?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den komplizierten Weg, um zu erreichen mein Ziel war es, in der Tat schreiben, meinen eigenen
javax.servlet.Filter
und Einbettung in die Filterkette. Diese Lösung entspricht den Apache Tomcat Vorschlag in Tomcat Wiki - Character-Encoding-Probleme.Update (2010-07-31): Die erste version dieses filters interpretiert den query-string selbst, das war eine schlechte Idee. Es hat nicht Griff
POST
Anfragen korrekt und hatte Probleme beim kombinieren mit anderen servlet-Filter wie für URL-rewriting. Diese version stattdessen wickelt der ursprünglich vorgesehenen Parameter und neu kodiert Sie. Um es richtig funktioniert, ist dieURIEncoding
(zum Beispiel Tomcat) müssen so konfiguriert werden, dassISO-8859-1
.Während die code-Größe ist relativ klein, es gibt einige Implementierungsdetails, die man bekommen kann, falsch ist, so hätte ich erwartet, dass Tomcat liefert bereits einen ähnlichen filter.
Um diesen filter zu aktivieren, habe ich die folgende für meine
web.xml
:Schon etwas ähnliches zu Rolands Lösung auf SGES2.1.1 (ich glaube es nutzt catalina dieselbe wie die eines alten Kater), aber es gab einige Probleme:
Heute, nachdem ich lese viele blogs und Ratschläge, die ich gelöscht, die ganze Klasse und habe nur eine einfache Sache: analysiert charset aus dem Content-Type-header in der wrapper-Konstruktor und legen Sie die verpackte Instanz.
Funktioniert es, alle unsere 988 tests gelungen.