--- /dev/null
+package de.juplo.yourshouter;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.social.connect.Connection;
+import org.springframework.social.connect.web.SignInAdapter;
+import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.NativeWebRequest;
+
+
+/**
+ * Simple implementation of {@link SignInAdapter}.
+ *
+ * This implementation signes in the user by storing him in the
+ * {@link SecurityContext} provided by Spring-Security, using the user-ID as
+ * principal.
+ *
+ * We configured Spring-Social to call this implementation, to sign in the
+ * user, after he was authenticated by Facebook.
+ *
+ * @author Kai Moritz
+ */
+@Service
+public class SpringSecuritySignInAdapter implements SignInAdapter
+{
+ private final static Logger LOG =
+ LoggerFactory.getLogger(SpringSecuritySignInAdapter.class);
+
+ /**
+ * Stores the user in the {@link SecurityContext} provided by Spring Security
+ * to sign him in. Spring Security will automatically persist the
+ * authentication in the user-session for subsequent requests.
+ *
+ * @param user
+ * The user-ID. We configured Spring-Social to call
+ * {@link UserCookieSignInAdapter} to extract a user-ID from the
+ * connection.
+ * @param connection
+ * The connection. In our case a connection to Facebook.
+ * @param request
+ * The actual request. We need it, to store the cookie.
+ * @return
+ * We return <code>null</code>, to indicate, that the user should be
+ * redirected to the default-post-sign-in-URL (configured in
+ * {@link ProviderSinInController}) after a successfull authentication.
+ *
+ * @see {@link ProviderSignInController#postSignInUrl}
+ */
+ @Override
+ public String signIn(
+ String user,
+ Connection<?> connection,
+ NativeWebRequest request
+ )
+ {
+ LOG.info(
+ "signing in user {} (connected via {})",
+ user,
+ connection.getKey().getProviderId()
+ );
+
+ SecurityContextHolder.getContext().setAuthentication(
+ new UsernamePasswordAuthenticationToken(user, null, null));
+
+ // We return null to trigger a redirect to "/".
+ return null;
+ }
+}