Как получить доступ к правильному `this` внутри обратного вызова?

Всякий раз, когда мы пытаемся подключиться к URL-адресу,

, если сервер на другом сайте работает по протоколу https и обязателен для связи через информацию, предоставленную в сертификате, у нас есть следующая опция:

1) запросить сертификат (загрузить сертификат), импортировать этот сертификат в доверенность. По умолчанию для использования функции доверия по умолчанию java можно найти в \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, тогда если мы попытаемся подключиться к URL-соединению, будет принято.

2) В обычном бизнесе мы можем подключаться к внутренним URL-адресам в организациях, и мы знаем, что они верны. В таких случаях вы доверяете правильному URL-адресу. В таких случаях выше может использоваться код, который не будет указывать на сохранение сертификата для подключения к определенному URL-адресу.

для точки 2 для выполнения следующих шагов:

1) напишите ниже метод, который устанавливает HostnameVerifier для HttpsURLConnection, который возвращает true для всех случаев, то есть мы доверяем trustStore.

  // trusting all certificate 
 public void doTrustToCertificates() throws Exception {
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
                        return;
                    }

                    public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
                        return;
                    }
                }
        };

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) {
                    System.out.println("Warning: URL host '" + urlHostName + "' is different to SSLSession host '" + session.getPeerHost() + "'.");
                }
                return true;
            }
        };
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
    }

2) напишите ниже метод , который вызывает doTrustToCertificates перед попыткой подключиться к URL

    // connecting to URL
    public void connectToUrl(){
     doTrustToCertificates();//  
     URL url = new URL("https://www.example.com");
     HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
     System.out.println("ResponseCode ="+conn.getResponseCode());
   }

Этот вызов вернет код ответа = 200 означает, что соединение выполнено успешно.

Для получения более подробной информации и примера примера вы можете обратиться к URL .

1228
задан T.J. Crowder 11 July 2017 в 18:32
поделиться