@EnableWebSecurity在春天有什么用处

Meh*_*lik 26 java annotations spring-security spring-boot

按照春季文档

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

或者如图所示@EnableWebSecurity,用于在我们的项目中启用SpringSecurity.

但我的问题是,即使我没有注释我的任何类,@EnableWebSecurity仍有应用程序提示输入用户名和密码.(默认行为)

所以@EnableWebSecurity无论有没有,我都会收到同样的行为@EnableWebSecurity.

有人可以解释这个注释究竟是什么?

And*_*lko 24

@EnableWebSecurity是标记注释.它允许Spring查找(它是a @Configuration,因此@Component)并自动将类应用于全局WebSecurity.

如果我@EnableWebSecurity仍然没有注释我的任何类,仍然是应用程序提示输入用户名和密码.

是的,这是默认行为.如果查看类路径,可以找到标有该注释的其他类(取决于您的依赖项):

  • SpringBootWebSecurityConfiguration;
  • FallbackWebSecurityAutoConfiguration;
  • WebMvcSecurityConfiguration.

仔细考虑它们,关闭所需的配置,或覆盖其行为.

  • 能否详细说明"将它应用于全球的'WebSecurity`"? (8认同)

San*_*Lee 14

春季启动参考指南很好地解释了这件事.如果可以搜索@EnableWebSecurity:

要完全关闭默认Web应用程序安全配置,您可以添加一个bean @EnableWebSecurity(这不会禁用身份验证管理器配置或Actuator的安全性).要自定义它,通常使用外部属性和类型的bean WebSecurityConfigurerAdapter(例如,添加基于表单的登录).

...

如果添加@EnableWebSecurity并禁用Actuator安全性,除非添加自定义,否则将获得整个应用程序的默认基于表单的登录WebSecurityConfigurerAdapter.

...

如果在应用程序中的任何位置定义a @Configuration,@EnableWebSecurity它将关闭Spring Boot中的默认Webapp安全设置(但启用Actuator的安全性).要调整默认值,请尝试设置属性security.*(SecurityProperties有关可用设置的详细信息)和常用应用程序属性的"安全"部分.

显然,它是打开默认的Web应用程序安全配置并添加您自己的.

  • 最近的 Spring Boot 文档中没有找到更多内容。相反,它表示“要完全关闭默认的 Web 应用程序安全配置或组合多个 Spring Security 组件(例如 OAuth2 客户端和资源服务器),请添加 SecurityFilterChain 类型的 bean(这样做不会禁用 UserDetailsS​​ervice 配置或 Actuator 的安全性)。 ” (2认同)

Ken*_*ger 14

答案取决于您是否使用 Spring Boot。

如果您在没有 Spring Boot 的情况下使用 Spring 和 Spring Security,则 @EnableWebSecurity 会按照您在原始问题中描述的方式执行操作:它将自动定义和配置多个 bean、过滤器链等,以启用 Web 应用程序的基本安全性。

如果您使用 Spring Boot,自动配置类(请参阅https://github.com/spring-projects/spring-boot/tree/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org /springframework/boot/autoconfigure/security)将为您自动配置安全bean。不需要@EnableWebSecurity。事实上,对于 Boot,通常不需要任何 Spring 的 @Enable* 注解。

...除非您不喜欢 Spring Boot 的自动配置类设置安全性的方式。@EnableWebSecurity 会导致 Spring Security 的设置优先并导致 Spring Boot 自动配置停止。(当您将现有的 Spring Security 应用程序转换为 Spring Boot 并希望最大程度地减少更改时,有时需要这样做。)

Spring Boot 的自动配置默认行为和 @EnableWebSecurity 默认行为非常接近。这就是为什么您在删除注释后没有观察到任何差异的原因。