所以我有一个标准的 Spring Boot Web 应用程序。我需要允许多种身份验证机制。所以我希望能够拥有处理不同身份验证的 jar 文件。一个用于 SAML 服务器、CAS、OAuth 等...
我希望我的“基本”war 文件使用标准 jdbc(现在是这样),但我希望能够将我的 CAS-security.jar 放在类路径中,并让 spring 使用它的 AuthenticationProvider。现在我的 Application.java 类中有这个
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.authenticationProvider(authenticationProvider)
.userDetailsService(userDetailsService);
}
我 @Autowire 提供者和服务,它们像平常一样定义为 @Bean...
但我想注释(我认为)那些 @Bean 定义,以表示“如果还有其他可用的情况,请不要使用它”
我想要与 ConditionalOnMissingBean 完全相反的内容。现在我想我可以使用该注释,并列出我可以使用的每个可能的插件类,但这是不好的形式,因为我不想每次创建新的安全插件时都重新编译/重新部署。
是否有 UseThisIfNoOtherBeanExists
类型注释?
事实上,我真正想要的是,我拥有所有安全内容,例如 SecurityConfiguration,用 @Configuration 注释,并且将整个类替换为其他内容(如果可用)。
最佳答案
听起来您正在寻找 ConditionalOnMissingBean
。仅当且仅当该类型的 bean 尚未在 bean 工厂中注册时,才会使用用此注释的 bean。
如果您对此不满意,您还有其他选择。您可以仔细阅读the entire org.springframework.boot.autoconfigure.condition
package看看是否有最适合您的用例的东西。或者,您也可以利用 @Conditional
,并根据应用程序运行的环境手工制定条件。
关于java - 与 ConditionalOnMissingBean 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49237871/