Spring RestTemplate:403 异常(有时)
Spring RestTemplate: 403 Exception (sometimes)
我有一个 RestTemplate 调用 API (get)。这个调用,是我们唯一的 GET 类型,并通过代理。似乎 有时 在一周内,调用 returns 403 禁止访问,但有以下例外:“sun.security.validator.ValidatorException”
我们有一个介于 Spring 和 API 之间的证书,但证书工作正常(应用程序 returns 一天内有数千个“200 ok”)。
但有时,只有这个调用(不是其他POST)returns“403 Forbidden”。
我们已经完成了:
- 通过代理启动带有 curl 的 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 有时用?
- 最后一个:如果我们把RestTemplate改成Httpconnection,结果会不一样吗?
提前致谢
设置此属性效果很好(取决于您的指标)
.setMaxConnTotal(1000)
.setMaxConnPerRoute(40)
CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.setProxy(host)
.disableCookieManagement()
.disableRedirectHandling()
.setMaxConnTotal(1000)
.setMaxConnPerRoute(40)
.build();
我有一个 RestTemplate 调用 API (get)。这个调用,是我们唯一的 GET 类型,并通过代理。似乎 有时 在一周内,调用 returns 403 禁止访问,但有以下例外:“sun.security.validator.ValidatorException”
我们有一个介于 Spring 和 API 之间的证书,但证书工作正常(应用程序 returns 一天内有数千个“200 ok”)。
但有时,只有这个调用(不是其他POST)returns“403 Forbidden”。
我们已经完成了:
- 通过代理启动带有 curl 的 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 有时用?
- 最后一个:如果我们把RestTemplate改成Httpconnection,结果会不一样吗?
提前致谢
设置此属性效果很好(取决于您的指标)
.setMaxConnTotal(1000)
.setMaxConnPerRoute(40)
CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.setProxy(host)
.disableCookieManagement()
.disableRedirectHandling()
.setMaxConnTotal(1000)
.setMaxConnPerRoute(40)
.build();