@EnableWebSecurity和@EnableWebMvcSecurity有什么区别?

Mik*_*e R 46 java spring spring-mvc spring-security

@EnableWebSecurity

JavaDoc文档:

将此批注添加到@Configuration类中,以通过扩展基类和覆盖单个方法来Spring Security定义任何WebSecurityConfigurer或更多可能的配置WebSecurityConfigurerAdapter.

@EnableWebMvcSecurity

JavaDoc文档:

将此批注添加到@Configuration类中以使Spring Security配置与其集成Spring MVC.

  • " 与Spring MVC集成 "到底意味着什么?我得到了什么额外的行为?
  • 我找到了指南答案,这表明这个注释会添加CSRF TokensSpring MVCForms中,这是它添加的唯一内容吗?

Cas*_*ian 48

从Spring Security 4.0开始,@EnableWebMvcSecurity不推荐使用.替换 @EnableWebSecurity将决定基于类路径添加Spring MVC功能.

要启用Spring Security与Spring MVC的集成, 请在配置中添加@EnableWebSecurity 注释.

资源


Ste*_*eve 38

如果您查看这些类,@EnableWebMvcSecurity实际上会添加@EnableWebSecurity注释WebMvcSecurityConfiguration.因此,@EnableWebMvcSecurity所做的一切@EnableWebSecurity,以及更多.

还有什么问题?

如果您查看WebMvcSecurityConfiguration,您将看到它添加了一个,AuthenticationPrincipalArgumentResolver以便您可以通过向控制器方法参数添加注释来访问身份验证主体.即:

public String show(@AuthenticationPrincipal CustomUser customUser) {
    // do something with CustomUser
    return "view";
}
Run Code Online (Sandbox Code Playgroud)

它还与Spring Web MVC集成,为表单添加CSRF令牌.

  • BTW,`@ EnableWebMvcSecurity`将在4.0中弃用:https://jira.spring.io/browse/SEC-2790 (27认同)
  • 因此,如果“@EnableWebMvcSecurity”添加了一些“@EnableWebSecurity”没有添加的内容并且已被弃用,那么我现在应该使用什么注释来获取这些额外的内容(例如 CSRF)? (2认同)