gpt4 book ai didi

Spring Security - 有条件的 WebApplicationInitializer

转载 作者:行者123 更新时间:2023-11-28 22:01:50 27 4
gpt4 key购买 nike

Spring Security 的文档指出,为了使用 Java Config,我们可以扩展 AbstractSecurityWebApplicationInitializer 类,该类将为 Spring Security 设置所有 nesesarry bean 以工作。这种方法工作正常,初始化程序自动运行,Spring Security 在应用程序启动期间正确初始化。

但是现在我正面临着这种初始化应该依赖于系统属性的情况。因此,我只想在设置了某些系统属性(例如:app.enablesecurity=true)时包含我的初始化程序类,并且在任何其他情况下都不执行此初始化程序。

我未能针对该场景提出任何解决方案,因为:

  • AbstractSecurityWebApplicationInitializer 中,onStartup 方法是标记为最终,所以我无法覆盖它并添加条件
  • 如果我只是扩展 AbstractSecurityWebApplicationInitializer 它是总是由 Spring 自动获取并实例化(或者至少 Spring 尝试创建它的实例,它可能会失败),即使我将其声明为私有(private)/内部/嵌套类。

据我所知,有条件地包含此初始化程序的唯一可能性是使用 cglib/javassist 以动态创建一个扩展 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. ...
}
}
}

关于Spring Security - 有条件的 WebApplicationInitializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36573780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com