Spring安全性-条件WebApplicationInitializer
Spring Security的文档说明,为了使用Java配置,我们可以扩展Spring安全性-条件WebApplicationInitializer,spring,security,tomcat,Spring,Security,Tomcat,Spring Security的文档说明,为了使用Java配置,我们可以扩展AbstractSecurityWebApplicationInitializer类,该类将为Spring Security设置所有Nesarry bean。这种方法工作正常,初始化器自动运行,Spring Security在应用程序启动期间正确初始化 但是现在我面临一个场景,这个初始化应该依赖于一个系统属性。因此,我希望仅在设置了某些系统属性(例如:app.enablesecurity=true)时才包含我的初始值设定
AbstractSecurityWebApplicationInitializer
类,该类将为Spring Security设置所有Nesarry bean。这种方法工作正常,初始化器自动运行,Spring Security在应用程序启动期间正确初始化
但是现在我面临一个场景,这个初始化应该依赖于一个系统属性。因此,我希望仅在设置了某些系统属性(例如:app.enablesecurity=true
)时才包含我的初始值设定项类,并且在任何其他情况下都不执行此初始值设定项
我未能针对该场景提出任何解决方案,因为:
- 在
中,启动AbstractSecurityWebApplicationInitializer
方法是 已标记为final,因此我无法覆盖它并添加条件onStartup
- 如果我只是扩展AbstractSecurityWebApplicationInitializer,它就是 始终由Spring自动拾取并实例化(或者至少Spring尝试创建它的实例,它可能会失败),即使我 将其声明为私有/内部/嵌套类
AbstractSecurityWebApplicationInitializer
的类
还有别的办法吗?也许有某种方法可以让我隐藏我的实现,不让Spring获取,并在以后手动运行它?您可以使用类似这样的配置类来配置您的安全行为
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${app.enablesecurity}")
private boolean securityEnabled;
@Override
protected void configure(HttpSecurity http) throws Exception {
if (securityEnabled) {
http.csrf().disable();
...
} else {
http. ...
}
}
}