2015-12-23 3 views
1

У меня есть microservice landscape сконфигурировано с открытием Spring Cloud, так что я в состоянии получить доступ к другим экземплярам службы только с помощью их идентификаторов:Интеграция Spring Облако балансировки нагрузки с KeycloakRestTemplate

public class MyClass { 

    @Autowired 
    @LoadBalanced 
    private RestTemplate restTemplate; 

    public String doOtherStuff() { 
     String results = restTemplate.getForObject("http://stores/stores", String.class); 
     return results; 
    } 
} 

Теперь я хочу получить доступ к службе, которая требует Авторизация OAuth2. Я использую сервер Keycloak для его предоставления, а Keycloak уже предоставляет адаптер с определенным KeycloakRestTemplate. В любом случае, как улучшить его с помощью load balancing?

ответ

2

Нам нужно создать специальный KeycloakRestTemplate, который будет использовать LoadBalancerInterceptor:

@Configuration 
@EnableWebSecurity 
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class) 
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { 

    @Bean 
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 
    @LoadBalanced 
    public KeycloakRestTemplate keycloakRestTemplate(
      KeycloakClientRequestFactory keycloakClientRequestFactory, 
      LoadBalancerInterceptor interceptor) { 
     KeycloakRestTemplate result = new KeycloakRestTemplate(
      keycloakClientRequestFactory); 
     // Add the interceptor for load balancing 
     result.getInterceptors().add(interceptor); 
     return result; 
    } 

    //More configurations for keycloak 

} 

Таким образом, есть шанс получить в Авторизованный шаблон/LoadBalanced:

@Autowired 
@LoadBalanced 
protected KeycloakRestTemplate restTemplate; 

Смотрите также:

+0

Отличное решение. :) – Scott

 Смежные вопросы

  • Нет связанных вопросов^_^