2

我的 Spring MVC Web 应用程序同时为三个不同的 Web 商店提供三个不同的域(我们称它们为 domain1.com、domain2.com 和 domain3.com)。

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

在 Spring Social 中 - 据我了解 - 我只允许添加一个FacebookConnectionFactory,因此只允许添加一个提供程序应用程序。

尽管如此,我如何将这三个不同的 Facebook 应用程序添加到 Spring Social?Spring Social 有能力做到这一点吗?是否存在解决方法?

4

1 回答 1

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
}

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

String shopKey = "shop1Key";
FacebookConnectionFactory facebookConnectionFactory = (FacebookConnectionFactory) myConnectionFactoryRegistries.getRegistryForShopKey(shopKey).getConnectionFactory(FACEBOOK);
于 2017-09-11T14:27:02.180 回答