AEM中的HttpClient问题
我有一个编写自org.apache.commons.HttpClient包的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
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上提供了两个版本,旧版本就是我们使用的版本。见上面我的答案。