HsftpFileSystem.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.hdfs;
  19. import java.io.IOException;
  20. import java.net.HttpURLConnection;
  21. import java.net.URI;
  22. import java.net.URISyntaxException;
  23. import java.net.URL;
  24. import java.net.UnknownHostException;
  25. import javax.net.ssl.HostnameVerifier;
  26. import javax.net.ssl.HttpsURLConnection;
  27. import javax.net.ssl.SSLSession;
  28. import org.apache.hadoop.conf.Configuration;
  29. /** An implementation of a protocol for accessing filesystems over HTTPS.
  30.  * The following implementation provides a limited, read-only interface
  31.  * to a filesystem over HTTPS.
  32.  * @see org.apache.hadoop.hdfs.server.namenode.ListPathsServlet
  33.  * @see org.apache.hadoop.hdfs.server.namenode.FileDataServlet
  34.  */
  35. public class HsftpFileSystem extends HftpFileSystem {
  36.   @Override
  37.   public void initialize(URI name, Configuration conf) throws IOException {
  38.     super.initialize(name, conf);
  39.     setupSsl(conf);
  40.   }
  41.   /** Set up SSL resources */
  42.   private static void setupSsl(Configuration conf) {
  43.     Configuration sslConf = new Configuration(false);
  44.     sslConf.addResource(conf.get("dfs.https.client.keystore.resource",
  45.         "ssl-client.xml"));
  46.     System.setProperty("javax.net.ssl.trustStore", sslConf.get(
  47.         "ssl.client.truststore.location", ""));
  48.     System.setProperty("javax.net.ssl.trustStorePassword", sslConf.get(
  49.         "ssl.client.truststore.password", ""));
  50.     System.setProperty("javax.net.ssl.trustStoreType", sslConf.get(
  51.         "ssl.client.truststore.type", "jks"));
  52.     System.setProperty("javax.net.ssl.keyStore", sslConf.get(
  53.         "ssl.client.keystore.location", ""));
  54.     System.setProperty("javax.net.ssl.keyStorePassword", sslConf.get(
  55.         "ssl.client.keystore.password", ""));
  56.     System.setProperty("javax.net.ssl.keyPassword", sslConf.get(
  57.         "ssl.client.keystore.keypassword", ""));
  58.     System.setProperty("javax.net.ssl.keyStoreType", sslConf.get(
  59.         "ssl.client.keystore.type", "jks"));
  60.   }
  61.   @Override
  62.   protected HttpURLConnection openConnection(String path, String query)
  63.       throws IOException {
  64.     try {
  65.       final URL url = new URI("https", null, pickOneAddress(nnAddr.getHostName()),
  66.           nnAddr.getPort(), path, query, null).toURL();
  67.       HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
  68.       // bypass hostname verification
  69.       conn.setHostnameVerifier(new DummyHostnameVerifier());
  70.       return (HttpURLConnection)conn;
  71.     } catch (URISyntaxException e) {
  72.       throw (IOException)new IOException().initCause(e);
  73.     }
  74.   }
  75.   @Override
  76.   public URI getUri() {
  77.     try {
  78.       return new URI("hsftp", null, pickOneAddress(nnAddr.getHostName()), nnAddr.getPort(),
  79.                      null, null, null);
  80.     } catch (URISyntaxException e) {
  81.       return null;
  82.     } catch (UnknownHostException e) {
  83.       return null;
  84.     }
  85.   }
  86.   /**
  87.    * Dummy hostname verifier that is used to bypass hostname checking
  88.    */
  89.   protected static class DummyHostnameVerifier implements HostnameVerifier {
  90.     public boolean verify(String hostname, SSLSession session) {
  91.       return true;
  92.     }
  93.   }
  94. }