【问题标题】:Spring Security - conditional WebApplicationInitializerSpring Security - 有条件的 WebApplicationInitializer
【发布时间】:2016-08-03 02:18:06
【问题描述】:

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

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

我没有为这种情况想出任何解决方案,因为:

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

据我所知,有条件地包含此初始化程序的唯一可能性是使用 cglib/javassist 以动态创建扩展 AbstractSecurityWebApplicationInitializer 的类。

还有其他方法吗?也许有一些方法可以让我隐藏我的实现不被 Spring 拾取并在以后手动运行它?

【问题讨论】:

    标签: spring security tomcat


    【解决方案1】:

    您可以像这样使用 Config Class 来配置您的安全行为

    @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. ...  
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2021-06-02
      • 2019-01-03
      • 2015-06-11
      • 2020-04-10
      • 1970-01-01
      相关资源
      最近更新 更多