Enabled autoconfiguration for Spring-Social and Spring-Security-OAuth2
[facebook-errors] / src / main / java / de / juplo / facebook / errors / FacebookErrorsOAuth2AutoConfiguration.java
diff --git a/src/main/java/de/juplo/facebook/errors/FacebookErrorsOAuth2AutoConfiguration.java b/src/main/java/de/juplo/facebook/errors/FacebookErrorsOAuth2AutoConfiguration.java
new file mode 100644 (file)
index 0000000..082b0d6
--- /dev/null
@@ -0,0 +1,75 @@
+package de.juplo.facebook.errors;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration;
+import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.oauth2.client.OAuth2RestTemplate;
+import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler;
+
+
+/**
+ * Automatic configuration for Srping-Security-OAuth2
+ *
+ * @author Kai Moritz
+ */
+@Configuration
+@ConditionalOnClass(value = OAuth2RestTemplate.class)
+@AutoConfigureAfter({
+  WebMvcAutoConfiguration.class,
+  OAuth2AutoConfiguration.class
+  })
+public class FacebookErrorsOAuth2AutoConfiguration
+{
+  private static final Logger LOG =
+      LoggerFactory.getLogger(FacebookErrorsOAuth2AutoConfiguration.class);
+
+  @Bean
+  static public BeanPostProcessor errorHandlerInjectorOAuth2()
+  {
+    LOG.info("Configuring OAuth2GraphApiErrorHandler for handling error-messages");
+
+    return new BeanPostProcessor()
+    {
+      @Override
+      public Object postProcessBeforeInitialization(
+          Object bean,
+          String beanName
+          )
+          throws
+            BeansException
+      {
+        if (bean instanceof OAuth2RestTemplate)
+        {
+          LOG.debug("Injecting OAuth2GraphApiErrorHandler in {}", bean);
+          OAuth2RestTemplate template = (OAuth2RestTemplate) bean;
+          template.setErrorHandler(
+              new OAuth2GraphApiErrorHandler(
+                  (OAuth2ErrorHandler)template.getErrorHandler()
+                  )
+              );
+        }
+
+        return bean;
+      }
+
+      @Override
+      public Object postProcessAfterInitialization(
+          Object bean,
+          String beanName
+          )
+          throws
+          BeansException
+      {
+        return bean;
+      }
+    };
+  }
+}