我遇到了一些正在使用的代码Protocol.registerProtocol试图阻止请求的某些 TLS 密码,并在有时重新启用它的情况下重试该请求,具体取决于其他因素。但是是否会Protocol.registerProtocol导致全局变化 - 即其他线程会受此影响吗?这是有问题的代码:protected static HostConfiguration buildTLSConfig(String uri, HostConfiguration config, boolean blockTLS1) throws MalformedURLException{ scheme = "https"; if (baseHttps == null) { baseHttps = Protocol.getProtocol(scheme); baseFactory = baseHttps.getSocketFactory(); } URL newUrl = new URL(uri); defaultPort = baseHttps.getDefaultPort(); if (blockTLS1) { ProtocolSocketFactory customFactory = new CustomHttpsSocketFactory(baseFactory, TLS_PREFERRED_PROTOCOLS); Protocol applyHttps = new Protocol(scheme, customFactory, defaultPort); Protocol.registerProtocol(scheme, applyHttps); config.setHost(newUrl.getHost(), defaultPort, applyHttps); } else { Protocol.registerProtocol(scheme, baseHttps); config.setHost(newUrl.getHost(), defaultPort, baseHttps); } return config;}
1 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
是的,所有线程都会受到更改的影响。
如果我们看一下org.apache.commons.httpclient.protocol.Protocol,我们会看到一个全局协议Map:
/** The available protocols */
private static final Map PROTOCOLS = Collections.synchronizedMap(new HashMap());
并registerProtocol()简单地修改它:
public static void registerProtocol(String id, Protocol protocol) {
// . . .
PROTOCOLS.put(id, protocol);
}
至少它是同步的,所以在修改过程中不会有竞争。
添加回答
举报
0/150
提交
取消