Spring Security - 有条件的WebApplicationInitializer

时间:2016-04-12 12:48:32

标签: spring security tomcat

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

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

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

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

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

还有其他方法吗?也许有一些方法可以让我隐藏我的实现,使其不被Spring选中并在以后手工运行?

1 个答案:

答案 0 :(得分:0)

您可以像这样使用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. ...  
        }
    }
}
相关问题