@EnableWebSecurity在春天有什么用?

根据春季文档

将此注释添加到类中,以便通过扩展基类并重写各个方法,在任何或更可能的情况下定义Spring Security配置:@ConfigurationWebSecurityConfigurerWebSecurityConfigurerAdapter

或者如本文所述,用于在我们的项目中启用SpringSecurity。@EnableWebSecurity

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

因此,我在有和没有.@EnableWebSecurity@EnableWebSecurity

有人可以解释一下这个注释到底是做什么的吗?


答案 1

是一个标记批注。它允许Spring查找(因此它是一个and),并自动将类应用于全局。@EnableWebSecurity@Configuration@ComponentWebSecurity

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

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

  • SpringBootWebSecurityConfiguration;
  • FallbackWebSecurityAutoConfiguration;
  • WebMvcSecurityConfiguration.

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


答案 2

弹簧靴参考指南对此进行了很好的解释。如果您使用 :@EnableWebSecurity

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

...

如果添加并同时禁用执行器安全性,则将获得整个应用程序的默认基于表单的登录名,除非您添加自定义 。@EnableWebSecurityWebSecurityConfigurerAdapter

...

如果您在应用程序中的任何地方定义了一个 with,它将在Spring Boot中关闭默认的Webapp安全设置(但将执行器的安全性保持启用状态)。要调整默认值,请尝试在常见应用程序属性的“安全性”部分中设置属性(有关可用设置的详细信息,请参阅)。@Configuration@EnableWebSecuritysecurity.*SecurityProperties

显然,这是关闭默认的Web应用程序安全配置并添加自己的安全配置。


推荐