Énoncé du problème
Pour accéder aux détails de l'utilisateur actuellement connecté implémentation au sein des contrôleurs dans une application Spring MVC, les développeurs ont généralement recours à une solution qui implique de récupérer l'objet Principal et de le convertir dans l'objet souhaité. taper. Bien que cette approche soit fonctionnelle, elle introduit une complexité et un encombrement inutiles au sein des contrôleurs.
Solution élégante avec @AuthenticationPrincipal
Heureusement, Spring Security fournit une solution plus rationalisée pour ce scénario grâce à l'utilisation d'annotations. Pour les versions de Spring Security 3.2 et supérieures, les développeurs peuvent utiliser l'annotation @AuthenticationPrincipal dans leurs contrôleurs pour récupérer l'implémentation de UserDetails.
Implémentation à l'aide de @AuthenticationPrincipal
Pour utiliser cette annotation, vous pouvez modifier votre méthode de contrôleur comme suit :
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { // ... }</code>
Solution alternative avec HandlerMethodArgumentResolver
Si vous utilisez Spring 3.1 ou une version antérieure, ou si vous avez besoin de plus de flexibilité, vous pouvez implémenter un WebArgumentResolver personnalisé ou HandlerMethodArgumentResolver pour y parvenir fonctionnalité.
Approche WebArgumentResolver
Pour WebArgumentResolver, vous pouvez créer une classe qui implémente l'interface suivante :
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver{ // Implement the resolveArgument method as detailed in the answer }</code>
Approche HandlerMethodArgumentResolver
Pour HandlerMethodArgumentResolver, vous pouvez créer une classe qui implémente l'interface suivante :
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { // Implement the supportsParameter and resolveArgument methods as detailed in the answer }</code>
Configuration avec un résolveur d'argument personnalisé
Après avoir implémenté votre résolveur d'argument personnalisé, vous devez configurer dans votre fichier de configuration Spring :
<code class="xml"><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" id="applicationConversionService"> <property name="customArgumentResolver"> <bean class="CurrentUserWebArgumentResolver"/> </property> </bean></code>
Spring Security 3.2 et solution ultérieure
Pour Spring Security 3.2 et versions ultérieures, une solution intégrée existe : l'annotation @AuthenticationPrincipal et AuthenticationPrincipalArgumentResolver. Ajoutez simplement l'annotation et le résolveur d'arguments à votre configuration :
<code class="xml"><mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven></code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!