浏览代码

更新argo日志获取-ssl

Zhangvinjo 3 年之前
父节点
当前提交
4749204b72

+ 52 - 3
src/main/java/io/renren/common/utils/ArgoUtils.java

@@ -14,12 +14,22 @@ import lombok.extern.slf4j.Slf4j;
 
 import io.argoproj.workflow.ApiClient;
 //import org.apache.http.client.HttpClient;
+import org.apache.commons.httpclient.protocol.Protocol;
 import org.springframework.beans.factory.annotation.Value;
 
 import java.io.IOException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
 import org.apache.commons.httpclient.*;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.params.HttpMethodParams;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
 /**
  * Argo 工具
  * @author Zhang
@@ -212,7 +222,7 @@ public class ArgoUtils {
      * @return 获取到的工作流
      * @throws ApiException api访问异常
      */
-    public static String getWorkflowlog(String namespace,String workflowname,String containertype){
+    public static String getWorkflowlog(String namespace,String workflowname,String containertype) throws Exception {
 //        WorkflowServiceApi apiInstance = new WorkflowServiceApi(apiClient);
 //        return apiInstance.workflowServiceGetWorkflow(namespace, workflowname, null, null);
 
@@ -246,7 +256,7 @@ public class ArgoUtils {
      * @return 获取到的工作流
      * @throws ApiException api访问异常
      */
-    public static String getpodlog(String namespace,String workflowname,String containertype,String podname){
+    public static String getpodlog(String namespace,String workflowname,String containertype,String podname) throws Exception {
 //        WorkflowServiceApi apiInstance = new WorkflowServiceApi(apiClient);
 //        return apiInstance.workflowServiceGetWorkflow(namespace, workflowname, null, null);
 
@@ -287,13 +297,24 @@ public class ArgoUtils {
      * @param charset
      * @return
      */
-    public static String doGet(String url, String charset) {
+    public static String doGet(String url, String charset) throws Exception {
+
+        trustAllHosts();
         //1.生成HttpClient对象并设置参数
+//        HttpClientFactory httpClientFactory = new HttpClientFactory();
+//        org.apache.http.client.HttpClient httpClient = httpClientFactory.getHttpsClient();
+
         HttpClient httpClient = new HttpClient();
+
+//        httpClient.setHostnameVerifier(DO_NOT_VERIFY)
+        Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443);
+        Protocol.registerProtocol("https", myhttps);
+
         //设置Http连接超时为10秒
         httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
         //2.生成GetMethod对象并设置参数
         GetMethod getMethod = new GetMethod(url);
+
         //设置get请求超时为10秒
         getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 10000);
         //设置请求重试处理,用的是默认的重试处理:请求三次
@@ -325,12 +346,40 @@ public class ArgoUtils {
         } catch (IOException e) {
             //发生网络异常
             System.out.println("发生网络异常!");
+            e.printStackTrace();
         } finally {
             //6.释放连接
             getMethod.releaseConnection();
         }
         return response;
     }
+    /**
+     * Trust every server - dont check for any certificate
+     */
+    private static void trustAllHosts() {
+        final String TAG = "trustAllHosts";
+        // Create a trust manager that does not validate certificate chains
+        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
+            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+                return new java.security.cert.X509Certificate[] {};
+            }
+            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+//                Log.i(TAG, "checkClientTrusted");
+            }
+            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+//                Log.i(TAG, "checkServerTrusted");
+            }
+        } };
+        // Install the all-trusting trust manager
+        try {
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, trustAllCerts, new java.security.SecureRandom());
+            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 
 
 

+ 114 - 0
src/main/java/io/renren/common/utils/MySSLProtocolSocketFactory.java

@@ -0,0 +1,114 @@
+package io.renren.common.utils;
+
+
+import java.io.IOException;
+        import java.net.InetAddress;
+        import java.net.InetSocketAddress;
+        import java.net.Socket;
+        import java.net.SocketAddress;
+        import java.net.UnknownHostException;
+        import java.security.KeyManagementException;
+        import java.security.NoSuchAlgorithmException;
+        import java.security.cert.CertificateException;
+        import java.security.cert.X509Certificate;
+
+        import javax.net.SocketFactory;
+        import javax.net.ssl.SSLContext;
+        import javax.net.ssl.TrustManager;
+        import javax.net.ssl.X509TrustManager;
+
+        import org.apache.commons.httpclient.ConnectTimeoutException;
+        import org.apache.commons.httpclient.params.HttpConnectionParams;
+        import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
+
+
+
+/**
+ * author by lpp
+ *
+ * created at 2010-7-26 上午09:29:33
+ */
+public class MySSLProtocolSocketFactory implements ProtocolSocketFactory {
+
+    private SSLContext sslcontext = null;
+
+    private SSLContext createSSLContext() {
+        SSLContext sslcontext=null;
+        try {
+            sslcontext = SSLContext.getInstance("SSL");
+            sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (KeyManagementException e) {
+            e.printStackTrace();
+        }
+        return sslcontext;
+    }
+
+    private SSLContext getSSLContext() {
+        if (this.sslcontext == null) {
+            this.sslcontext = createSSLContext();
+        }
+        return this.sslcontext;
+    }
+
+    public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
+            throws IOException, UnknownHostException {
+        return getSSLContext().getSocketFactory().createSocket(
+                socket,
+                host,
+                port,
+                autoClose
+        );
+    }
+
+    public Socket createSocket(String host, int port) throws IOException,
+            UnknownHostException {
+        return getSSLContext().getSocketFactory().createSocket(
+                host,
+                port
+        );
+    }
+
+
+    public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort)
+            throws IOException, UnknownHostException {
+        return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);
+    }
+
+    public Socket createSocket(String host, int port, InetAddress localAddress,
+                               int localPort, HttpConnectionParams params) throws IOException,
+            UnknownHostException, ConnectTimeoutException {
+        if (params == null) {
+            throw new IllegalArgumentException("Parameters may not be null");
+        }
+        int timeout = params.getConnectionTimeout();
+        SocketFactory socketfactory = getSSLContext().getSocketFactory();
+        if (timeout == 0) {
+            return socketfactory.createSocket(host, port, localAddress, localPort);
+        } else {
+            Socket socket = socketfactory.createSocket();
+            SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
+            SocketAddress remoteaddr = new InetSocketAddress(host, port);
+            socket.bind(localaddr);
+            socket.connect(remoteaddr, timeout);
+            return socket;
+        }
+    }
+
+    //自定义私有类
+    private static class TrustAnyTrustManager implements X509TrustManager {
+
+        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+
+        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[]{};
+        }
+    }
+
+
+}

+ 3 - 1
src/main/java/io/renren/modules/sys/controller/VisiWorkflowController.java

@@ -948,7 +948,7 @@ public class VisiWorkflowController extends AbstractController {
      * 20220428
      */
     @RequestMapping("/getworkflowlog2")
-    public R Getworkflowlog2(@RequestParam Map<String, Object> params) throws IOException, InterruptedException, ApiException {
+    public R Getworkflowlog2(@RequestParam Map<String, Object> params) throws Exception {
         Object workflowName = params.get("workflowName");//工作流名称
         String namespace = "argo"; // String |                //对应命名空间下的workflowTemplate
         String name = workflowName.toString();
@@ -1166,6 +1166,8 @@ public class VisiWorkflowController extends AbstractController {
 
         } catch (ApiException e) {
             e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
         }
         return R.ok().put("podname", podname).put("podcontent", podcontent).put("podphase",podphase);
     }