1 package de.juplo.facebook;
4 import java.util.Arrays;
5 import java.util.LinkedList;
7 import javax.annotation.PostConstruct;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10 import org.springframework.beans.BeansException;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.beans.factory.config.BeanPostProcessor;
13 import org.springframework.context.annotation.Bean;
14 import org.springframework.context.annotation.Configuration;
15 import org.springframework.security.oauth2.client.OAuth2RestTemplate;
16 import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler;
17 import org.springframework.security.oauth2.client.token.AccessTokenProvider;
18 import org.springframework.security.oauth2.client.token.AccessTokenProviderChain;
19 import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsAccessTokenProvider;
20 import org.springframework.security.oauth2.client.token.grant.implicit.ImplicitAccessTokenProvider;
21 import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider;
26 * This class injects the facebook-utils into the spring-oauth2-configuration
31 public class FacebookUtils
33 private final Logger log = LoggerFactory.getLogger(FacebookUtils.class);
36 @Autowired(required=false)
37 private List<AccessTokenProvider> accessTokenProviderChain;
43 if (accessTokenProviderChain == null)
45 log.info("no AccessTokenProviderChain configured, creating default-chain");
46 accessTokenProviderChain =
47 Arrays.<AccessTokenProvider> asList(
48 new ImplicitAccessTokenProvider(),
49 new ResourceOwnerPasswordAccessTokenProvider(),
50 new ClientCredentialsAccessTokenProvider()
57 public BeanPostProcessor getBeanPostProcessor(final String clientSecret)
59 log.debug("createing new instance of BeanPostProcessor");
60 return new BeanPostProcessor() {
63 public Object postProcessBeforeInitialization(
70 if (bean instanceof OAuth2RestTemplate)
72 log.info("injecting signed_request-aware AccessTokenProviderChain");
73 OAuth2RestTemplate template = (OAuth2RestTemplate)bean;
74 List<AccessTokenProvider> chain =
75 new LinkedList<>(accessTokenProviderChain);
76 SignedRequestAwareAuthorizationCodeAccessTokenProvider provider =
77 new SignedRequestAwareAuthorizationCodeAccessTokenProvider();
78 provider.setSecret(clientSecret);
80 template.setAccessTokenProvider(new AccessTokenProviderChain(chain));
81 log.info("injecting GraphApiErrorHandler");
82 template.setErrorHandler(
83 new GraphApiErrorHandler(
84 (OAuth2ErrorHandler)template.getErrorHandler()
93 public Object postProcessAfterInitialization(