Spring社交登录:如何添加同一社交提供商的多个应用程序(f.e.Facebook)?

时间:2017-03-13 15:24:18

标签: spring spring-security spring-social spring-social-facebook spring-social-google

我的Spring MVC网络应用程序同时提供三个不同网站的三个不同网站(让我们称之为domain1.com,domain2.com和domain3.com)。

对于这些商店中的每一个,我需要提供自己的社交登录(具有自定义登录屏幕标题,自定义数据隐私声明......)。因此,我需要创建三个不同的社交提供商(f.e.facebook)应用程序。

在Spring社交中 - 根据我的理解 - 我只允许添加一个FacebookConnectionFactory,而且只允许一个提供商应用。

我怎么能把这三个不同的facebook应用程序添加到Spring Social? Spring Social能够管理这个吗?是否存在变通方法?

1 个答案:

答案 0 :(得分:0)

可能我对OP的回答太晚了,但这对其他开发者来说可能是有用的。 我为此问题实现了一个解决方法,定义了我自己的“注册表”,如下所示:

<bean id="myConnectionFactoryRegistries" class="package.ShopsFactoryRegistries">
    <property name="registries">
    <map key-type="java.lang.String">
        <entry key="shop1Key" value-ref="connectionFactoryRegistryShop1" />
        <entry key="shop2Key" value-ref="connectionFactoryRegistryShop2" />
    </map>
    </property>
</bean>

<bean id="connectionFactoryRegistryShop1"
    class="org.springframework.social.connect.support.ConnectionFactoryRegistry">
    <property name="connectionFactories">
        <list>
            <bean
                class="org.springframework.social.facebook.connect.FacebookConnectionFactory">
                <constructor-arg value="${facebook.apikey.shop1}" />
                <constructor-arg value="${facebook.apisecret.shop1}" />
            </bean>
        </list>
    </property>
</bean>

<bean id="connectionFactoryRegistryShop2"
    class="org.springframework.social.connect.support.ConnectionFactoryRegistry">
    <property name="connectionFactories">
        <list>
            <bean
                class="org.springframework.social.facebook.connect.FacebookConnectionFactory">
                <constructor-arg value="${facebook.apikey.shop2}" />
                <constructor-arg value="${facebook.apisecret.shop2}" />
            </bean>
        </list>
    </property>
</bean>

并实施工厂以检索与“当前”商店相关的正确ConnectionFactoryRegistry(由shopKey识别)。

public class ShopsFactoryRegistries
{
    private Map<String, ConnectionFactoryRegistry> registries;

    public ConnectionFactoryRegistry getRegistryForShopKey(String shopKey)
    {
        return registries.get(shopKey);
    }

    //getter and setter for registries
}

使用此代码,您可以检索shop1

的facebookConnectionFactory
String shopKey = "shop1Key";
FacebookConnectionFactory facebookConnectionFactory = (FacebookConnectionFactory) myConnectionFactoryRegistries.getRegistryForShopKey(shopKey).getConnectionFactory(FACEBOOK);
相关问题