【问题标题】:What is the difference between @EnableWebSecurity and @EnableWebMvcSecurity?@EnableWebSecurity 和 @EnableWebMvcSecurity 有什么区别?
【发布时间】:2015-03-10 11:10:29
【问题描述】:

@EnableWebSecurity

​​>

JavaDoc 文档:

将此注解添加到@Configuration 类,以在任何WebSecurityConfigurer 中定义Spring Security 配置,或者更可能通过扩展WebSecurityConfigurerAdapter 基类并覆盖各个方法。

@EnableWebMvcSecurity

​​>

JavaDoc 文档:

将此注解添加到@Configuration 类,以使Spring Security 配置与Spring MVC 集成。

  • 与 Spring MVC 集成”究竟意味着什么?我会得到哪些额外的行为?
  • 我发现guides & answers,这说明这个注解在Spring MVC表单中添加了CSRF Tokens,这是它唯一添加的吗?

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    从 Spring Security 4.0 开始,@EnableWebMvcSecurity 已弃用。替换是 @EnableWebSecurity 将确定添加 Spring MVC 功能 基于类路径。

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

    source

    【讨论】:

      【解决方案2】:

      如果您查看这些类,@EnableWebMvcSecurity 实际上在WebMvcSecurityConfiguration 中添加了@EnableWebSecurity 注释。因此,@EnableWebMvcSecurity 做了 @EnableWebSecurity 所做的一切,而且还更多。

      你还问什么?

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

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

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

      【讨论】:

      • 顺便说一句,@EnableWebMvcSecurity 将在 4.0 中弃用:jira.spring.io/browse/SEC-2790
      • 感谢@SlavaSemushin - 值得了解
      • 当我尝试@EnableWebSecurity 时它不能与我的拦截器一起工作?是否有任何冲突或者我需要做一些配置来防止路径被拦截器拦截。我正在使用HandleInterceptor
      • 所以如果@EnableWebMvcSecurity 添加了一些@EnableWebSecurity 没有并且正在被弃用的东西,我现在应该使用什么注释来获得像CSRF 这样的额外东西?
      • 我不确定您还在寻找什么其他功能(如果有的话),但从 Spring Security 4.0 开始,CSRF 默认启用:docs.spring.io/spring-security/site/docs/current/reference/html/…
      猜你喜欢
      • 2020-11-09
      • 2017-11-24
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      相关资源
      最近更新 更多