복붙노트

[SPRING] 봄 부팅 - 나머지 템플릿 및 나머지 템플릿 빌더

SPRING

봄 부팅 - 나머지 템플릿 및 나머지 템플릿 빌더

RestTemplateBuilder는 RestTemplate을위한 어떤 종류의 팩토리입니다. 사용에 대한 몇 가지 질문이 있습니다.

도와 주셔서 감사합니다.

최신 정보:

내 응용 프로그램은 다른 IP 및 URL의 여러 서버에서 서비스를 호출합니다. 따라서 논리적으로 나에게 RestTemplates가 많은 상황이 있습니다.

서버마다 공장 (RestTemplateBuilder)을 갖기 위해 노력하고 있습니다. 서버 A, B, C를 말합니다. 기본 인증을 추가하는 방법을 알고 있습니다. 하지만 예를 들어 서버 A에 대한 기본 인증을 원하지만 서버 B에 대해서는 기본 인증을 원할 때 무엇입니까?

서버 당 하나의 RestTemplateBuilder가 있다고 생각합니다. 이 작업을 수동으로하고 싶지 않습니다. 스프링 메커니즘을 사용하는 것을 선호합니다.

어떤 도움?

해결법

  1. ==============================

    1.

    @Bean
    public RestTemplateBuilder restTemplateBuilder() {
       return new RestTemplateBuilder()
            .rootUri(rootUri)
            .basicAuthorization(username, password);
    }
    
  2. ==============================

    2.나는 내 config 다음과 같이 설정했다.

    나는 내 config 다음과 같이 설정했다.

    @Bean
    public RestTemplateCustomizer restTemplateCustomizer() {
        return restTemplate -> {
            restTemplate.setRequestFactory(clientHttpRequestFactory());
        };
    }
    
    @Bean
    public ClientHttpRequestFactory clientHttpRequestFactory() {
        SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory();
        clientHttpRequestFactory.setConnectTimeout(connectionTimeoutMs);
        clientHttpRequestFactory.setReadTimeout(connectionTimeoutMs);
        clientHttpRequestFactory.setBufferRequestBody(false);
        return clientHttpRequestFactory;
    }
    

    Spring이 RestTemplateBuilder를 삽입 할 때마다, RestTemplateCustomizer를 사용하여 ClientHttpRequestFactory를 사용하도록 Spring을 설정합니다. 다른 사용자 정의를 수행해야 할 수도 있고 경우에 따라 Bean을 선언하지 않을 수도 있습니다.

    인증 헤더를 추가하려면 런타임까지 알 수없는 사용자 이름과 암호를 알아야합니다. 그래서 인증 자빈을 만들었습니다.

    @Component
    public class Authenticator {
    
        @Autowired
        private RestTemplateBuilder restTemplateBuilder;
    
        public void withAuthenticationHeader(String username, String password, Consumer<RestTemplate> doAuthenticated) {
            RestTemplate restTemplate =
                restTemplateBuilder
                    .basicAuthorization(username, password)
                    .build();
    
            try {
                doAuthenticated.accept(restTemplate);
    
            } catch (HttpClientErrorException exception) {
                // handle the exception
            }
        }
    }
    

    이를 통해 모든 요청에 ​​대해 표준 방식으로 인증 실패를 처리 할 수 ​​있습니다. 이는 애플리케이션에서 필요한 것입니다.

    그것은 다른 콩에 주사되고 이렇게 사용됩니다 :

    @Autowired
    private Authenticator authenticator;
    
    public void transmit() {
        authenticator.withAuthenticationHeader(username, password, restTemplate -> 
            restTemplate.postForLocation(url, request));
    }
    

    따라서 RestTemple을 직접 사용하는 대신 Authenticator를 사용하십시오. 이런 종류의 표준 패턴을 찾을 수 없지만 이것이 효과가있는 것 같습니다.

  3. from https://stackoverflow.com/questions/39957550/spring-boot-rest-template-and-rest-template-builder by cc-by-sa and MIT license