如何正确实例化RestTemplate而不泄漏资源

Eye*_*ter 5 spring fortify spring-rest

请我有以下 bean 定义

 @Bean
    public RestTemplate produceRestTemplate(ClientHttpRequestFactory requestFactory){
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        restTemplate.setErrorHandler(restTemplateErrorHandler);
        return restTemplate;
    }

@Bean
public ClientHttpRequestFactory createRequestFactory() {
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(maxTotalConn);
    connectionManager.setDefaultMaxPerRoute(maxPerChannel);

    RequestConfig config = RequestConfig.custom().setConnectTimeout(100000).build();
    CloseableHttpClient httpClient = HttpClients.createDefault();
    return new HttpComponentsClientHttpRequestFactory(httpClient);
}
Run Code Online (Sandbox Code Playgroud)

该代码运行良好,但问题是 fortify 将上面的代码标记为以下代码可能存在问题

“函数 createRequestFactory() 有时无法释放第 141 行的 createDefault() 分配的套接字。”

请任何有任何想法的人了解如何在不加强警报的情况下正确执行此操作

提前致谢

SPo*_*int 0

检查这2点,即可解决问题。

  1. 如果您从不调用该httpClient.close()方法,有时您可能会耗尽套接字。

  2. 如果您的代码在某处自动调用此方法,则不存在漏洞和问题。

    无论如何,这可能是 FalsePositiv,具体取决于您使用的 Java 和 Lib 的版本