Spring Social's ConnectController
works with one or more provider-specific ConnectionFactory
s to exchange authorization details with the provider and to create connections.
Spring Social Facebook provides FacebookConnectionFactory
, a ConnectionFactory
for creating connections with Facebook.
So that ConnectController
can find FacebookConnectionFactory
, it must be registered with a ConnectionFactoryRegistry
.
The following class constructs a ConnectionFactoryRegistry
containing a ConnectionFactory
for Facebook using Spring's Java configuration style:
@Configuration public class SocialConfig { @Bean public ConnectionFactoryLocator connectionFactoryLocator() { ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry(); registry.addConnectionFactory(new FacebookConnectionFactory( environment.getProperty("facebook.clientId"), environment.getProperty("facebook.clientSecret"))); return registry; } }
Here, a Facebook connection factory is registered with ConnectionFactoryRegistry
via the addConnectionFactory()
method.
If we wanted to add support for connecting to other providers, we would simply register their connection factories here in the same way as FacebookConnectionFactory
.
Because client IDs and secrets may be different across environments (e.g., test, production, etc) it is recommended that these values be externalized.
As shown here, Spring 3.1's Environment
is used to look up the application's client ID and secret.
Optionally, you may also configure ConnectionFactoryRegistry
and FacebookConnectionFactory
in XML:
<bean id="connectionFactoryLocator" class="org.springframework.social.connect.support.ConnectionFactoryRegistry"> <property name="connectionFactories"> <list> <bean class="org.springframework.social.facebook.connect.FacebookConnectionFactory"> <constructor-arg value="${facebook.clientId}" /> <constructor-arg value="${facebook.clientSecret}" /> </bean> </list> </property> </bean>
This is functionally equivalent to the Java-based configuration of ConnectionFactoryRegistry
shown before.
The only casual difference is that the connection factories are injected as a list into the connectionFactories
property rather than with the addConnectionFactory()
method.
As in the Java-based configuration, the application's client ID and secret are externalized (shown here as property placeholders).
Refer to Spring Social's reference documentation for complete details on configuring ConnectController
and its dependencies.