为了账号安全,请及时绑定邮箱和手机立即绑定

apache HttpClient 的 Protocol.registerProtocol

apache HttpClient 的 Protocol.registerProtocol

哔哔one 2021-11-24 19:04:49
我遇到了一些正在使用的代码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);

}

至少它是同步的,所以在修改过程中不会有竞争。


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 311 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信