Détecter l'encodage des URI automatiquement dans Tomcat
J'ai une instance d'Apache Tomcat 6.x en cours d'exécution, et je veux qu'il interpréter le jeu de caractères de l'Url entrantes un peu plus intelligent que le comportement par défaut. En particulier, je veux réaliser le mappage suivant:
So%DFe => Soße
So%C3%9Fe => Soße
So%DF%C3%9F => (error)
La bevavior je veux peut être décrite comme "essayer de décoder le flux d'octets en UTF-8, et si ça ne fonctionne pas assumer ISO-8859-1".
Simplement à l'aide de la URIEncoding
de configuration ne fonctionne pas dans ce cas. Alors, comment puis-je configurer Tomcat pour encoder la demande de la façon que je veux?
Je pourrais avoir à écrire un Filtre qui prend la demande (en particulier la chaîne de requête) et re-encode dans les paramètres. Serait-ce de façon naturelle?
OriginalL'auteur Roland Illig | 2010-04-17
Vous devez vous connecter pour publier un commentaire.
La manière compliquée à atteindre mon objectif était en effet d'écrire mon propre
javax.servlet.Filter
et de les intégrer dans la chaîne de filtres. Cette solution est conforme à l'Apache Tomcat suggestion fourni dans Tomcat Wiki - Problèmes D'Encodage De Caractères.mise à Jour (2010-07-31): La première version de ce filtre interprété la chaîne de la requête elle-même, ce qui était une mauvaise idée. Il n'a pas de poignée
POST
correctement les requêtes et a eu des problèmes lorsqu'il est combiné avec d'autres servlet filtres comme pour l'URL-rewriting. Cette version à la place des enveloppements à l'origine de la condition de paramètres et de ré-encode. Pour le faire fonctionner correctement, leURIEncoding
(par exemple dans Tomcat) doit être configuré pour êtreISO-8859-1
.Alors que le code de la taille est relativement petite, il y a quelques détails de mise en œuvre que l'on peut se tromper, donc j'aurais attendu que Tomcat offre déjà un filtre semblable.
Pour activer ce filtre, j'ai ajouté ce qui suit à mon
web.xml
:OriginalL'auteur Roland Illig
Nous l'avons déjà fait quelque chose de similaire à Roland solution sur SGES2.1.1 (j'chose il utilise catalina même que certains vieux Matous), mais il avait quelques problèmes:
Aujourd'hui, après j'ai lu beaucoup de blogs et de conseils, j'ai supprimé l'ensemble de la classe et n'a qu'une seule et simple chose: analysé jeu de caractères à partir de l'entête Content-Type dans l'emballage du constructeur et enveloppé d'instance.
Il fonctionne, tous nos 988 tests réussi.
OriginalL'auteur dmatej