我的Spring MVC网络应用程序同时提供三个不同网站的三个不同网站(让我们称之为domain1.com,domain2.com和domain3.com)。
对于这些商店中的每一个,我需要提供自己的社交登录(具有自定义登录屏幕标题,自定义数据隐私声明......)。因此,我需要创建三个不同的社交提供商(f.e.facebook)应用程序。
在Spring社交中 - 根据我的理解 - 我只允许添加一个FacebookConnectionFactory
,而且只允许一个提供商应用。
我怎么能把这三个不同的facebook应用程序添加到Spring Social? Spring Social能够管理这个吗?是否存在变通方法?
答案 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
:
String shopKey = "shop1Key";
FacebookConnectionFactory facebookConnectionFactory = (FacebookConnectionFactory) myConnectionFactoryRegistries.getRegistryForShopKey(shopKey).getConnectionFactory(FACEBOOK);