AEM中的HttpClient问题

AEM中的HttpClient问题,aem,apache-httpclient-4.x,apache-commons-httpclient,Aem,Apache Httpclient 4.x,Apache Commons Httpclient,我有一个编写自org.apache.commons.HttpClient包的HttpClient代码 因为我是这样设置连接时间和套接字超时的 final HttpClient http = new HttpClient(this.connectionManager); http.getParams().setParameter("http.connection.timeout", this.connectionTimeout); http.getParams().setParameter("h

我有一个编写自org.apache.commons.HttpClient包的HttpClient代码

因为我是这样设置连接时间和套接字超时的

final HttpClient http = new HttpClient(this.connectionManager);

http.getParams().setParameter("http.connection.timeout", this.connectionTimeout);
http.getParams().setParameter("http.socket.timeout", this.socketTimeout);
现在Adobe云提出了一个问题,即没有设置超时(这不是真的)。 他们建议使用

@Reference
private HttpClientBuilderFactory httpClientBuilderFactory;

public void doThis() {
  HttpClientBuilder builder = httpClientBuilderFactory.newBuilder();
  RequestConfig requestConfig = RequestConfig.custom()
    .setConnectTimeout(5000)
    .setSocketTimeout(5000)
    .build();
  builder.setDefaultRequestConfig(requestConfig);

  HttpClient httpClient = builder.build();

  // do something with the client
}
提及

但HttpClientBuilderFactory不属于**org.apache.commons.httpclient它属于org.apache.http.client**

并始终返回可关闭的Http客户端

如何解决此安全问题?我可以为异常添加注释吗?还是我必须重写我所有的代码


此问题与Adobe Experience Manager 6.5实例有关。

是否可能是因为您没有设置正确的超时参数

您正在设置属性
http.connection.timeout
,该属性在类
org.apache.commons.httpclient.params.HttpClientParams
中不可用

http.getParams()
返回具有套接字超时和连接管理器超时但没有连接超时的实例。您可能可以使用常量
HttpClientParams.CONNECTION\u MANAGER\u TIMEOUT
为连接管理器设置超时

另一方面,类可以使用属性
http.connection.timeout


问题在于Adobe有两个版本的HttpClient,一个是旧的3.x版本,具有包结构org.apache.commons.HttpClient.HttpClient,另一个是HttpClientBuilderFactory提供的4.x org.apache.http.HttpClient

我被这件事弄得头晕目眩。最后我们只有两个选择

1) 将我们所有的commons http api(3.x)重写为apache.http(4.x)的更新版本,该版本具有setTimeout和setConnectionTimeout方法

2) @SuppressWarnings(“CQRules:ConnectionTimeoutMechanism”)


我们选择了第2个选项,因为这方面的工作非常巨大,我们计划很快投入使用。

我是否理解您的意思,Adobes“AEM托管服务-构建管道”的安全检查提出了一个问题?顺便说一句,我目前的项目也有很多努力围绕着这个系统跳舞。问题是AEM在HttpClient上提供了两个版本,旧版本就是我们使用的版本。见上面我的答案。