Question

Je dois interfacer une application existante avec la sécurité Acegi / Spring.

Pour commencer, je cherche une information simple: dans ce contexte, HttpServletRequest.getUserPrincipal () appelé depuis mon application retournera-t-il correctement le nom d'utilisateur obtenu via Spring (par opposition à l'utilisation d'objets spécifiques à Spring)? J'ai des informations contradictoires sur Google à ce sujet.

Je suppose que si Acegi est implémenté avec des filtres, il est capable de surcharger le getUserPrincipal () de l'API Servlet, n'est-ce pas?

Question subsidiaire: si ce n'est pas le cas par défaut, existe-t-il un moyen de l'activer?

Merci,

-Erik

Était-ce utile?

La solution

Comme les utilisateurs précédents ont répondu, Spring Security prend en charge les méthodes getUserPrincipal et isUserInRole. Voici comment la sécurité de printemps fait.

Lorsque vous configurez spring, il peut charger les filtres suivants:

http: // statique. springframework.org/spring-security/site/reference/html/ns-config.html#filter-stack

Dans la configuration de filtre standard, le filtre SecurityContextHolderAwareRequestFilter est chargé.

Examen du filtre @ https://fisheye.springsource.org/browse/spring-security/tags/spring-security-parent-2.0.4/core/ src / main / java / org / springframework / sécurité / wrapper / SecurityContextHolderAwareRequestFilter.java? r = 2514

Vous pouvez le voir encapsuler et modifier l'objet HttpServletRequest en SecurityContextHolderAwareRequestWrapper , qui étend HttpServletRequestWrapper , qui implémente HttpServletRequest et transmettez-le à la chaîne de filtres de servlets standard doFilter. Dans la mesure où le filtre de sécurité Spring doit être configuré en tant que premier filtre, toutes les classes suivantes voient à la place le SecurityContextHolderAwareRequestWrapper . Cela inclut les pages JSP ou les servlets situés derrière ce filtre.

Lorsque vous appelez isUserInRole ou getUserPrincipal depuis la page JSP, le servlet ou tout framework derrière ce filtre, il appelle le HttpServletRequest implémentation de Spring Security.

Autres conseils

Si vous utilisez le filtre de sécurité, c'est le cas. Je crois que c'est le comportement par défaut.

La classe à laquelle vous appartenez dépend exactement de votre configuration, mais elles implémentent toutes l'interface Principal par le biais de l'interface propre de Spring, org.springframework.security.Authentication, qui l'étend.

J'ai utilisé request.getUserPrincipal () et request.isUserInRole () dans une application Spring et cela fonctionne de manière transparente, même au sein des JSP.

Je pense que Spring Security stocke ces informations dans le SecurityContext et non dans la requête. Vous pouvez facilement écrire un FilterSecurityInterceptor pouvant être configuré pour ajouter également cette information à la demande.

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