使用可选的提供者bean

时间:2016-03-21 13:34:14

标签: java spring spring-security xsd-validation

我有两个相互独立的弹簧轮廓,如下所示:

<beans profile="prof1">
    <security:authentication-manager id="authenticationManager" erase-credentials="true">
        <security:authentication-provider ref="1" />
        <security:authentication-provider ref="2" />
        <security:authentication-provider ref="3" />
    </security:authentication-manager>
</beans>

<beans profile="prof2" >
    <security:authentication-manager id="authenticationManager" erase-credentials="true">
        <security:authentication-provider ref="0" />
        <security:authentication-provider ref="1" />
        <security:authentication-provider ref="2" />
        <security:authentication-provider ref="3" />
    </security:authentication-manager>
</beans>

例如,我可以通过以下方式启用配置文件:

|prof1|prof2|
|true |true |
|true |false|
|false|true |
|false|false|

如果指定了最后一个选项,则会抱怨错过身份验证管理器

为了解决这个问题,我找了类似&#34;对spring bean&#34; 的可选引用。

即想法是从下面的配置文件中提取经理:

 <security:authentication-manager id="authenticationManager" erase-credentials="true">
            <security:authentication-provider ref="0-optional-reference" />
            <security:authentication-provider ref="1" />
            <security:authentication-provider ref="2" />
            <security:authentication-provider ref="3" />
        </security:authentication-manager>

然后使用名称&#34; 0&#34;作为可选bean。我发现了以下帖子Optional Spring bean references但看起来任何选项对我都不起作用,因为我无法替换&#34; ref&#34;属性为&#34;值&#34;因为春天xsd。

最好知道如何为 authentication-provider spring标记指定可选bean。

1 个答案:

答案 0 :(得分:0)

Spring抱怨因为当两个配置文件都不活动时,prof1prof2 <beans>块中声明的bean定义不会被考虑在内,因此不会加载到{{1} }。 因此,在运行时,Spring Security找不到任何类型BeanFactory的bean并抱怨。

您可以做的是在新的AuthenticationManager块中声明“默认”AuthenticationManager,只有在<beans>prof1都无效时才会生效:

prof2