web-dev-qa-db-fra.com

Quelle est la différence entre @EnableWebSecurity et @EnableWebMvcSecurity?

@EnableWebSecurity

La documentation JavaDoc:

Ajoutez cette annotation à un @Configuration classe pour avoir le Spring Security configuration définie dans n'importe quel WebSecurityConfigurer ou plus probablement en étendant la classe de base WebSecurityConfigurerAdapter et en remplaçant les méthodes individuelles.

@EnableWebMvcSecurity

La documentation JavaDoc:

Ajoutez cette annotation à un @Configuration classe pour avoir le Spring Security la configuration s'intègre avec Spring MVC.

  • Que signifie exactement " intégrer à Spring MVC "? Quels comportements supplémentaires ai-je?
  • J'ai trouvé guides & réponses , ce qui suggère que cette annotation ajoute CSRF Tokens à Spring MVC Les formulaires, est-ce la seule chose qu'il ajoute?
45
Mike R

Si vous jetez un œil à ces classes, @EnableWebMvcSecurity ajoute en fait le @EnableWebSecurity annotation dans WebMvcSecurityConfiguration. Donc, @EnableWebMvcSecurity fait tout ce que @EnableWebSecurity le fait, et un peu plus.

Que demandez-vous de plus?

Si vous regardez WebMvcSecurityConfiguration, vous verrez qu'il ajoute un AuthenticationPrincipalArgumentResolver afin que vous puissiez accéder au principal d'authentification en ajoutant une annotation à un argument de méthode de contrôleur. c'est à dire.:

public String show(@AuthenticationPrincipal CustomUser customUser) {
    // do something with CustomUser
    return "view";
}

Il s'intègre également à Spring Web MVC pour ajouter un jeton CSRF aux formulaires.

37
Steve

Depuis Spring Security 4.0, @EnableWebMvcSecurity est obsolète. Le remplacement est @EnableWebSecurity qui déterminera l'ajout des fonctionnalités Spring MVC en fonction du chemin de classe.

Pour activer l'intégration de Spring Security avec Spring MVC, ajoutez le @EnableWebSecurity annotation à votre configuration.

source

47
Cassian