카테고리 없음

Spring RestTemplate : 403 예외 (때때로)

기록만이살길 2021. 2. 20. 05:31
반응형

Spring RestTemplate : 403 예외 (때때로)

1. 질문(문제점):

API에 대한 RestTemplate 호출이 있습니다 (get). 이 호출은 GET 유형의 유일한 호출이며 프록시를 통과합니다. 때때로 일주일 동안 호출이 "sun.security.validator.ValidatorException"예외와 함께 403 Forbidden을 반환하는 것 같습니다 .

Spring과 API 사이에 인증서가 있지만 인증서는 정상적으로 작동합니다 (애플리케이션은 하루 동안 수천 개의 "200 ok"를 반환합니다).

그러나 때때로이 호출 만 (POST 인 다른 호출이 아님) "403 Forbidden"을 리턴합니다.

우리는 다음을 수행했습니다.

  • 프록시를 통해 컬로 Jmeter를 시작합니다 (모든 것이 정상인 것 같습니다)
  • 테스트를 위해서만 TrustStore를 비활성화 (결과는 ko)

이것은 RestTemplate 코드입니다.

SSLConnectionSocketFactory socketFactory;
socketFactory = new SSLConnectionSocketFactory(new SSLContextBuilder()
    .loadTrustMaterial(ResourceUtils.getFile(this.trustStorePath), this.trustStorePassword.toCharArray())
    .loadKeyMaterial(ResourceUtils.getFile(this.keyStorePath), this.keystorePassword.toCharArray(),
        this.keystorePassword.toCharArray())
    .build(), NoopHostnameVerifier.INSTANCE);


CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(socketFactory).setProxy(host)
    .disableCookieManagement().disableRedirectHandling().build();

ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(client);

RestTemplate restTemplateVar = new RestTemplate(requestFactory);

그리고 이것이 부름입니다.

response = this.restTemplate.getForEntity(this.host, String.class);
  • 동시 연결 수가 원인 일 수 있습니까?
  • 왜 GET과 가끔씩 만 사용합니까?
  • 그리고 마지막 : Httpconnection으로 RestTemplate을 변경하면 결과가 다를 수 있습니까?

미리 감사드립니다

2. 해결방안:

이 속성 설정은 정상적으로 작동합니다 (메트릭에 따라 다름).

.setMaxConnTotal (1000)
.setMaxConnPerRoute (40)

CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.setProxy(host)
.disableCookieManagement()
.disableRedirectHandling()
.setMaxConnTotal(1000)        
.setMaxConnPerRoute(40)
.build();
65952712
반응형