2

Meine Spring MVC-Webanwendung bedient simultan drei verschiedene Webshops mit drei verschiedenen Domains (nennen wir sie domain1.com, domain2.com und domain3.com).Spring Social Login: Wie kann man mehr als eine App desselben sozialen Anbieters (zB Facebook) hinzufügen?

Für jeden dieser Shops muss ich ein eigenes Social Login anbieten (mit benutzerdefiniertem Login-Bildschirm Titel, benutzerdefinierte Datenschutzerklärung, ...). Daher muss ich drei verschiedene Social-Provider-Apps (zB Facebook) erstellen.

In Spring Social - von meinem Verständnis - ich darf nur eine FacebookConnectionFactory und hiermit nur eine Anbieter-App hinzufügen.

Wie kann ich trotzdem diese drei verschiedenen Facebook-Apps zu Spring Social hinzufügen? Ist Spring Social dazu in der Lage? Gibt es Workarounds?

Antwort

0

Möglicherweise habe ich zu spät für das OP geantwortet, aber das könnte für andere Entwickler nützlich sein. Ich implementierte eine Abhilfe für dieses Problem meine eigene „Register“ wie folgt definieren:

<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> 

Und eine Fabrik implementieren, um die richtige ConnectionFactoryRegistry auf den „aktuellen“ shop (identifiziert durch die shopKey) bezogen abzurufen.

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

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

    //getter and setter for registries 
} 

Mit diesem Code Sie die facebookConnectionFactory für die shop1 abrufen können:

String shopKey = "shop1Key"; 
FacebookConnectionFactory facebookConnectionFactory = (FacebookConnectionFactory) myConnectionFactoryRegistries.getRegistryForShopKey(shopKey).getConnectionFactory(FACEBOOK); 
Verwandte Themen