@EnableWebSecurity 和 @EnableWebMvcSecurity 有啥区别?

Posted

技术标签:

【中文标题】@EnableWebSecurity 和 @EnableWebMvcSecurity 有啥区别?【英文标题】: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,这是它唯一添加的吗?

【问题讨论】:

【参考方案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/…

以上是关于@EnableWebSecurity 和 @EnableWebMvcSecurity 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

java Spring @EnableResourceServer 和 @EnableWebSecurity

使用 EnableWebSecurity 时 AuthenticationPrincipal 为空

使用@EnableWebSecurity 时,configureGlobal(..) 是不是需要@Autowired?

如何在@WebMvcTest 测试中忽略@EnableWebSecurity 注释类

EnableWebSecurity 无法解析为类型

Spring security 的 @EnableWebSecurity 与 oauth 的 @EnableResourceServer