package com.piggymetrics.notification; import com.piggymetrics.notification.repository.converter.FrequencyReaderConverter; import com.piggymetrics.notification.repository.converter.FrequencyWriterConverter; import feign.RequestInterceptor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.convert.CustomConversions; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext; import org.springframework.security.oauth2.client.OAuth2RestTemplate; import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; import java.util.Arrays; @SpringBootApplication @EnableDiscoveryClient @EnableResourceServer @EnableOAuth2Client @EnableFeignClients @EnableGlobalMethodSecurity(prePostEnabled = true) @EnableConfigurationProperties @EnableScheduling public class NotificationServiceApplication { public static void main(String[] args) { SpringApplication.run(NotificationServiceApplication.class, args); } @Bean @ConfigurationProperties(prefix = "security.oauth2.client") public ClientCredentialsResourceDetails clientCredentialsResourceDetails() { return new ClientCredentialsResourceDetails(); } @Bean public RequestInterceptor oauth2FeignRequestInterceptor(){ return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), clientCredentialsResourceDetails()); } @Bean public OAuth2RestTemplate clientCredentialsRestTemplate() { return new OAuth2RestTemplate(clientCredentialsResourceDetails()); } @Configuration static class CustomConversionsConfig { @Bean public CustomConversions customConversions() { return new CustomConversions(Arrays.asList(new FrequencyReaderConverter(), new FrequencyWriterConverter())); } } }