@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 文档:
“与 Spring MVC 集成”究竟意味着什么?我会得到哪些额外的行为? 我发现guides & answers,这说明这个注解在将此注解添加到
@Configuration
类,以使Spring Security
配置与Spring MVC
集成。
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 注释类
Spring security 的 @EnableWebSecurity 与 oauth 的 @EnableResourceServer