Question

Je cherche un moyen d'obtenir les paramètres de forme d'une requête HTTP en plusieurs parties dans un filtre Servlet sans téléchargement de fichiers (encore).

request.getParameterMap () retourne à vide. Je comprends cela est dû à la demande étant en plusieurs parties.

Je l'ai regardé commons.HttpFileUpload mais cela semble être trop pour ma situation. Dans ce filtre, je suis seulement intéressé par les paramètres normaux, et ne veux pas gérer le téléchargement de fichier encore.

Edit: le principal problème est que je dois avoir un HttpRequestObject intact plus bas dans la pile de filtres. Le HttpFileUpload semble consommer une partie des données de demande (probablement en utilisant l'objet de flux de données et de fermer à nouveau.)

Était-ce utile?

La solution

Il est certainement pas exagéré, c'est la bonne façon et toujours mieux que d'écrire vous-même analyseur. Apache Commons FileUpload est développé et maintenu pendant des années et a prouvé sa robustesse dans le traitement multipart / form-data demandes . Vous ne voulez pas de réinventer la roue. Si vous voulez vraiment faire (je ne recommande pas), puis lire sur le multipart / form spécification -data et commencer par la lecture du HttpServletRequest#getInputStream(). (avertissement: c'est un mélange de données binaires et caractères)

Vous pouvez si nécessaire aussi écrire un filtre qui utilise Apache Commons FileUpload sous le capot et vérifie chaque demande si elle est multipart / form-data et si oui, puis mettre les paramètres de retour sur la carte des paramètres de demande avec l'aide de Commons FileUpload et mettre les fichiers téléchargés (ou exceptions) comme demande attributs, de sorte qu'il est finalement un peu plus transparente dans votre code de servlet. Vous pouvez trouver ici un exemple de base pour obtenir l'idée.

Hope this helps.

Autres conseils

Le site Web du Oreilly Servlets a quelques exemples de code que vous pouvez télécharger et utiliser Customize. Cela inclut MultipartRequest qui sonne comme il le fait ce que vous besoin, il ONU- boîtes une demande multipart et permet d'accéder aux paramètres et les fichiers séparément.

Il suffit d'ajouter aux réponses déjà fournies - j'avais un problème très similaire à ce que je cherchais à ajouter une validation CSRF à notre application web existante. Nous avons décidé d'inclure un jeton spécial dans chaque formulaire en utilisant certains JS et ajouter un filtre de servlet pour vérifier que le jeton existait (donc une solution générique, isolée).

Le servlet vérifier si le jeton était présent mais brisé pour toutes les formes qui ont fourni une option de téléchargement de fichiers. D'où je suis arrivé à cette page souvent en faisant quelques recherches sur Google.

Le travail autour de nous avons utilisé (tout en essayant d'éviter toute transaction avec les fichiers téléchargés) est d'obtenir un peu de JavaScript pour ajouter le jeton en tant que paramètre GET, par exemple, nous avons modifié l'URL d'action du formulaire pour inclure le jeton et pourrait donc utiliser la procédé HttpServletRequest.getParameter () pour le jeton (et seulement le jeton).

Je l'ai testé dans IE, FF et Chrome et tous semblent être heureux.

Espérons que cela aide quelqu'un qui se trouve aussi dans une situation similaire.

Commons FileUpload fournit un mécanisme pour lire params demande à partir d'un téléchargement de formulaire multipart.

Il y a un exemple vraiment super de la façon de saisir les paramètres de la requête ici:

Comment télécharger des fichiers vers le serveur en utilisant JSP / Servlet?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top