AEM 中的 HttpClient 问题
Issue with HttpClient in AEM
我编写了一个来自 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 Cloud 提出了未设置超时的问题(这不是真的)。
他们建议使用
设置超时
@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
}
参考Link
但是HttpClientBuilderFactory不属于**org.apache.commons.httpclient它属于org.apache.http.client**
并且总是 returns 可关闭的 Http 客户端。
如何解决此安全问题?我可以为异常添加注释吗?还是我必须重写所有代码?
此问题与 Adobe Experience Manager 6.5 实例有关。
可能是因为你没有设置正确的超时参数?
您设置的 属性 http.connection.timeout
在 class org.apache.commons.httpclient.params.HttpClientParams
中不可用。
http.getParams()
returns HttpClientParams 的一个实例,它有套接字超时和连接管理器超时,但没有连接超时。您可能会使用常量 HttpClientParams.CONNECTION_MANAGER_TIMEOUT
为连接管理器设置超时?
另一方面,属性 http.connection.timeout
可用于 class HttpConnectionParams。
问题是 Adobe 有两个版本的 HttpClient,旧的 3.x 具有包结构 org.apache.commons.httpclient.HttpClient 和 HttpClientBuilderFactory 给出的 4.x org.apache.http.Httpclient。
我为此伤透了脑筋。最后我们有两个选择...
1) 将我们所有的公共 http api(3.x) 重写为更新版本的 apache.http (4.x) 具有方法 setTimeout 和 setConnectionTimeout
或
2)@SuppressWarnings("CQRules:ConnectionTimeoutMechanism")
我们选择了选项 2,因为这方面的工作量很大,我们计划很快上线。
我编写了一个来自 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 Cloud 提出了未设置超时的问题(这不是真的)。 他们建议使用
设置超时@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
}
参考Link
但是HttpClientBuilderFactory不属于**org.apache.commons.httpclient它属于org.apache.http.client**
并且总是 returns 可关闭的 Http 客户端。
如何解决此安全问题?我可以为异常添加注释吗?还是我必须重写所有代码?
此问题与 Adobe Experience Manager 6.5 实例有关。
可能是因为你没有设置正确的超时参数?
您设置的 属性 http.connection.timeout
在 class org.apache.commons.httpclient.params.HttpClientParams
中不可用。
http.getParams()
returns HttpClientParams 的一个实例,它有套接字超时和连接管理器超时,但没有连接超时。您可能会使用常量 HttpClientParams.CONNECTION_MANAGER_TIMEOUT
为连接管理器设置超时?
另一方面,属性 http.connection.timeout
可用于 class HttpConnectionParams。
问题是 Adobe 有两个版本的 HttpClient,旧的 3.x 具有包结构 org.apache.commons.httpclient.HttpClient 和 HttpClientBuilderFactory 给出的 4.x org.apache.http.Httpclient。
我为此伤透了脑筋。最后我们有两个选择...
1) 将我们所有的公共 http api(3.x) 重写为更新版本的 apache.http (4.x) 具有方法 setTimeout 和 setConnectionTimeout
或
2)@SuppressWarnings("CQRules:ConnectionTimeoutMechanism")
我们选择了选项 2,因为这方面的工作量很大,我们计划很快上线。