猿问

apache HttpClient 的 Protocol.registerProtocol

我遇到了一些正在使用的代码


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;

}


哔哔one
浏览 312回答 1
1回答

繁花不似锦

是的,所有线程都会受到更改的影响。如果我们看一下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);}至少它是同步的,所以在修改过程中不会有竞争。
随时随地看视频慕课网APP

相关分类

Java
我要回答