我有两个相互独立的弹簧轮廓,如下所示:
<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。
答案 0 :(得分:0)
Spring抱怨因为当两个配置文件都不活动时,prof1
和prof2
<beans>
块中声明的bean定义不会被考虑在内,因此不会加载到{{1} }。
因此,在运行时,Spring Security找不到任何类型BeanFactory
的bean并抱怨。
您可以做的是在新的AuthenticationManager
块中声明“默认”AuthenticationManager
,只有在<beans>
和prof1
都无效时才会生效:
prof2