L'obtention d'une valeur de HttpServletRequest.getRemoteUser() dans Tomcat sans modification de l'application
(À l'aide de la version 6 de Java et Tomcat 6.)
Est-il un moyen pour moi d'obtenir HttpServletRequest.getRemoteUser()
pour retourner une valeur dans mon environnement de développement (ex: localhost) sans avoir à modifier mon application web.xml fichier?
La raison pour laquelle je demande, c'est que la mise en œuvre d'authentification lorsque l'application est déployée dans un environnement à distance est gérée par un serveur web et outil branché. Tourne en local je n'ai évidemment pas l'outil branché ou un autre serveur web; j'ai juste Tomcat 6. Je suis en train d'essayer d'éviter d'ajouter du code à ma demande simplement de soutenir le développement sur mon localhost.
J'espère qu'il y a une modification que je peux apporter à la context.xml ou server.xml les fichiers qui me permettra de régler la distance de l'ID d'utilisateur ou qui vont essayer de tirer à partir d'un en-tête HTTP ou quelque chose.
L'application web ne communique pas avec le plug-in; le serveur web s'occupe de lui. L'application web demande juste le
HttpServletRequest
exemple pour l'utilisateur distant.
OriginalL'auteur Mark | 2011-09-26
Vous devez vous connecter pour publier un commentaire.
Ici est une preuve de concept
Valve
de mise en œuvre qui n':(Testé avec Tomcat 7.0.21.)
Le compiler, le mettre dans un bocal et copier le jar de la
apache-tomcat-7.0.21/lib
dossier. Vous avez besoin de modifier laserver.xml
:Je suppose qu'il fonctionne à l'intérieur de la
Engine
etContext
contenants trop.Plus d'informations:
server.xml
fichier. J'ai dû faire un changement parce que je suis en cours d'exécution de Tomcat v6.0.20: laGenericPrincipal
signature nécessite un royaume alors j'ai ajoutéfinal Realm realm = request.getContext().getRealm();
. Cependant, il ne semble pas avoir un effet. J'ai essayé la mise à jour de lacontext.xml
fichier, trop, mais encore une fois il n'a produit aucun résultat. La demande du principal et de l'ID d'utilisateur sont à la foisnull
quand ils atteignent mon code d'application. Avez-vous peut-être faire autre chose?J'ai juste passé
null
que royaume, et ça marche pour moi avec Tomcat 6.0.20. (Voir mes modifications dans la réponse.) Il y a aucune exception dans vos journaux?Merci beaucoup pour l'aider avec tout cela. Il s'avère que j'ai eu votre vanne correctement mis en œuvre tout au long de. La raison pour laquelle il n'a pas de travail était parce que je n'ai pas été avertis de l'importance de la définition de la
catalina.base
de la JVM des biens sur le serveur de démarrage. Une fois que j'ai modifié leserver.xml
à cet endroit et tout a fonctionné parfaitement. Merci encore!Super utile, merci, palacsint
En fait, vous pouvez oublier le
GenericPrincipal
et de mettre en œuvre la simplePrincipal
interface vous-même ou un rip offBasicUserPrincipal
à partir de Apache HttpClient.OriginalL'auteur palacsint
L'utilisation d'un local, le fichier de la base de domaine pour les tests. Vérifiez votre
conf/tomcat-users.xml
et de créer des rôles et des utilisateurs de votre application et activer les contraintes de sécurité dans votre web.xml. Il y a des exemples dans letomcat-users.xml
.tomcat-users.xml
fichier et le savoir sur l'ajout de contraintes de sécurité au sein de mon application web.xml mais je me demande si il existe un moyen de réaliser quelque chose de similaire sans modification réel/réel/destinés à la production de code; je serais plus heureuse modifiant ma configuration du serveur local.Salut, palacsint Pourriez-vous montrer plus de détails déployés à l'utilisateur distant via fichier xml... Merci!
Je suis désolé, je n'ai pas le temps maintenant pour une réponse complète. Je suppose que vous devriez poser une nouvelle question. Envoyez-moi un lien et je vais vérifier sur le week-end si personne n'a la réponse.
Merci beaucoup! palacsint, j'ai posté ici, Merci ...
OriginalL'auteur palacsint