创建名称为 '_loginCommandPostProcessor' 的 Bean 时出错



我目前正在使用 spring-flex 集成,并希望添加通过 spring 保护的 Web 服务。

为此,我正在尝试创建两个http标签?

spring-security-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.somenamespace.login" />   
<context:annotation-config/>
<beans:bean id="entryPoint"
class="org.springframework.flex.security4.FlexAuthenticationEntryPoint"/>

<http entry-point-ref="entryPoint" pattern="/messagebroker/**">
<intercept-url pattern="/**" access="authenticated"/>
<custom-filter position="FORM_LOGIN_FILTER" ref="myAuthFilter" />
<session-management session-authentication-strategy-ref="sas"/>
</http>
<http  pattern="*">
<intercept-url pattern="/**" access="authenticated"/>
<http-basic />
<custom-filter position="FORM_LOGIN_FILTER" ref="myAuthFilter" />
<session-management session-authentication-strategy-ref="sas"/>
</http>
<beans:bean id="myAuthFilter" class=
"org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="sessionAuthenticationStrategy" ref="sas" />
<beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>
<beans:bean id="sas" class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy" />
<beans:bean id="switchUserProcessingFilter" class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter">
<beans:property name="userDetailsService" ref="customAuthenticationProvider"/>
<beans:property name="switchUserUrl" value="/admin/impersonate"/>
<beans:property name="targetUrl" value="/cre/CRE.html"/>
<beans:property name="switchFailureUrl" value="/admin/switchUser"/>
</beans:bean> 

<beans:bean id="defaultMessageTemplate" class="org.springframework.flex.messaging.MessageTemplate" />
<beans:bean id="customAuthenticationProvider" class="com.somenamespace.login.CustomAuthenticationProvider"/>
<authentication-manager alias="authenticationManager">  
<authentication-provider ref="customAuthenticationProvider"/>  <    
</authentication-manager>
</beans:beans>

我收到以下错误:

Error creating bean with name '_loginCommandPostProcessor': Unsatisfied dependency expressed through bean property 'sessionAuthenticationStrategy'; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.security.web.authentication.session.SessionAuthenticationStrategy' available: expected single matching bean but found 3: org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#0,org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#1,sas

><context:component-scan base-package="com.somenamespace.login" />- 通过这个你告诉Spring:"请扫描com.somenamespace.login并初始化任何标有注释的bean:@Component@Repository@Service@Controller到我的应用程序上下文中"。

因此,您将 3 个 bean 初始化到上下文中,这些 bean 是自动连接到属性sessionAuthenticationStrategy的候选者:

  1. sas-- 通过扫描com.somenamespace.login初始化(请参阅 本答案开头的声明)。
  2. org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#0-- 你没想到会被初始化的 bean;可能您在其他 XML Spring 中可能还有另一个 上下文文件(如果它们存在于您的应用程序中 - 我不知道 那个)。
  3. org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#1- 见第 2 点。

春天不知道该选择哪一个。因此,您会收到错误。

我可能会向您建议两种可能的解决方案:

  1. 肮脏的,但很快。您将sas豆标记为主豆。喜欢这个:<beans:bean id="sas" class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy" primary=true/>还请注意,如果您需要注入CompositeSessionAuthenticationStrategy类的 bean 或任何其他在您的应用程序中实现SessionAuthenticationStrategy但不是sas的 bean,此解决方案不适合您,因为它将始终注入sas
  2. 更清洁的解决方案,但可能需要更多时间:找出可以 挑起意想不到的豆子被启动并修复它。从我的角度来看 视图,正如我所说,这可能是额外的<context:component-scan />声明在 Spring 上下文 XML 文件中的某个位置(如果有 不止一个)。

    祝你好运!我希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新