Obtenir les paramètres de formulaire de demande multiparties sans obtenir les fichiers
Je suis à la recherche d'un moyen d'obtenir les paramètres du formulaire de un HTTP multi-partie demande dans un Servlet-filtre sans téléchargement de fichiers (encore).
demande.getParameterMap() retourne vide. Je comprends que c'est à cause de la demande multi-partie.
J'ai regardé communes.HttpFileUpload mais cela semble être exagéré pour ma situation. Dans ce filtre, je suis seulement intéressé dans les paramètres normaux, et ne voulons pas gérer le fichier de téléchargement de encore.
Edit: le problème principal est que j'ai besoin d'avoir une intacte HttpRequestObject plus bas dans la pile de filtres. Le HttpFileUpload semble consommer une partie de la demande de données (probablement en utilisant le flux de données de l'objet et de le fermer à nouveau.)
parce que je suis en train de travailler sur un assez grand projet qui s'appuie sur l'objet HttpRequest, je ne peux pas changer facilement.
C'est trop peu d'informations. Même sans commons fileupload vous auriez le même problème. Veuillez fournir des précisions.
OriginalL'auteur pvgoddijn | 2009-11-17
Vous devez vous connecter pour publier un commentaire.
Ce n'est certainement pas exagéré, c'est la bonne façon et toujours mieux que d'écrire à l'analyseur de vous-même. Le Apache Commons FileUpload est développé et maintenu pendant des années et a prouvé sa robustesse dans le traitement des multipart/form-data demandes. Vous ne voulez pas de réinventer la roue. Si vous voulez vraiment le faire (je ne le recommande pas), puis lire sur le multipart/form-data spécification, et de commencer par la lecture de la
HttpServletRequest#getInputStream()
(attention: c'est un mélange de données binaires et caractères!).Vous pouvez, si nécessaire, créer un Filtre qui rend l'utilisation d'Apache Commons FileUpload sous le capot et vérifie chaque demande si c'est multipart/form-data et si oui, puis mettez à nouveau les paramètres dans la requête de paramètre de la carte avec l'aide de Commons FileUpload et de mettre les fichiers téléchargés (ou exceptions) que les attributs de la requête, de sorte que c'est finalement un peu plus de transparence dans votre servlet code. Vous pouvez trouver ici un exemple de base pour se faire une idée.
Espère que cette aide.
OriginalL'auteur BalusC
La Oreilly Servlets site a un exemple de code que vous pouvez télécharger à personnaliser et à utiliser. Cela comprend MultipartRequest qui sonne comme il le fait ce dont vous avez besoin, de l'onu-les boîtes de type multipart demande et permet d'accéder aux paramètres et les fichiers séparément.
OriginalL'auteur Tendayi Mawushe
Juste à ajouter aux réponses déjà fournies - j'ai eu un problème similaire que j'ai essayé d'ajouter quelques CSRF de la validation de notre application web. Nous avons décidé d'inclure un jeton spécial dans chaque formulaire à l'aide de certains JS et ajouter un filtre de servlet pour vérifier que le jeton existé (donc un générique, isolé de la solution).
La servlet serait de vérifier si le jeton était présent, mais cassé pour chaque formulaire fourni un fichier option de téléchargement. Donc j'ai atterri sur cette page régulièrement tout en faisant une recherche sur google.
Le travail autour de nous avons utilisé (tout en essayant d'éviter toute relation avec les fichiers téléchargés) était d'obtenir le JavaScript pour ajouter le jeton comme un paramètre GET, c'est à dire Nous avons modifié la forme de l'URL de l'action pour inclure le jeton, et qui pourrait donc utiliser le HttpServletRequest.méthode getParameter() pour le jeton (et seulement le jeton).
J'ai testé sous IE, FF et Chrome et tous semblent heureux.
Espère que cela vous aide aussi se retrouve dans une situation similaire.
le problème avec cette approche est que le jeton reste dans l'URL en https ne peut pas protéger docs.printemps.io/printemps-sécurité/site/docs/current/reference/html/...
OriginalL'auteur Ed .
Commons FileUpload fournit un mécanisme de demande de lecture de paramètres à partir d'un formulaire multipart télécharger.
Il y a vraiment un excellent exemple de la façon de saisir les paramètres de la requête ici:
Comment télécharger des fichiers vers le serveur à l'aide de JSP/Servlet?
OriginalL'auteur Christopher Johnson