Spring Social:无法使用xml配置创建SocialAuthenticationFilter

时间:2016-03-07 09:09:44

标签: spring-security spring-social spring-social-twitter

我想使用XML配置添加spring social facebook(spring social 1.1.4和spring social facebook 1.1.1)和spring security 4.0.3,

我无法添加SocialAuthenticationFilter:

    <b:bean id="socialAuthenticationFilter"  class="org.springframework.social.security.SocialAuthenticationFilter">
    <b:constructor-arg index="0" ref="authenticationManager" />
    <b:constructor-arg index="1" ref="userIdSource" />
    <b:constructor-arg index="2" ref="usersConnectionRepository" />
    <b:constructor-arg index="3" ref="socialAuthenticationServiceLocator" />
</b:bean>

由于此错误消息执行失败:

GRAVE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web.DefaultSecurityFilterChain#1' while setting bean property 'sourceList' with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.DefaultSecurityFilterChain#1': Cannot resolve reference to bean 'socialAuthenticationFilter' while setting constructor argument with key [4]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'socialAuthenticationFilter' defined in ServletContext resource [/WEB-INF/spring/security-context.xml]: Cannot resolve reference to bean 'socialAuthenticationServiceLocator' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'socialAuthenticationServiceLocator' is defined
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382)

1 个答案:

答案 0 :(得分:0)

您需要在上下文中定义适当的socialAuthenticationServiceLocator

<bean id="socialAuthenticationServiceLocator" class="org.springframework.social.security.SocialAuthenticationServiceRegistry">
    <property name="authenticationServices">
        <list>
            <bean class="org.springframework.social.twitter.security.TwitterAuthenticationService">
                <constructor-arg value="${twitter.apiKey}" />
                <constructor-arg value="${twitter.appSecret}" />            
            </bean>
        </list>
    </property>
</bean>