美文网首页
java的https忽略证书包含账号秘密的请求代码

java的https忽略证书包含账号秘密的请求代码

作者: 独孤流 | 来源:发表于2019-07-25 09:23 被阅读0次
    前言

    最近在配置iOS持续集成工具jenkins好方便测试人员自己打包,不用依赖开发人员,在大部分都配置好了也能用起来了,但发现配置有些繁琐,先是将证书、配置文件等信息在svn上更新,然后还要到jenkins上配置,这个过程比较繁琐,所以就想看看能不能省掉jenkins的配置,写一个插件让jenkins自动去svn服务器上读取配置,在过程中发现svn服务器也是一个https的地址,但是有账号密码限制,于是百度谷歌了好久才找到符合对应的配置,特记录之

    package io.jenkins.plugins.sample;
    
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.Authenticator;
    import java.net.HttpURLConnection;
    import java.net.PasswordAuthentication;
    import java.net.URL;
    import java.security.SecureRandom;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import java.util.ArrayList;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    
    
    public class HttpsRequest {
        public  ArrayList<String> requestSVN(String svnUrl,String svnName,String svnPwd) throws Exception {
            // 设置账号密码
            if(svnName != null && svnPwd != null){
                final PasswordAuthentication auth = new PasswordAuthentication (svnName, svnPwd.toCharArray());
                Authenticator.setDefault (new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return auth;
                    }
                });
            }
            // 设置忽略https证书校验
            HttpsURLConnection.setDefaultHostnameVerifier(new HttpsRequest().new NullHostNameVerifier());
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            URL url = new URL(svnUrl);
            // 打开restful链接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");// POST GET PUT DELETE
            // 设置访问提交模式,表单提交
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            conn.setConnectTimeout(130000);// 连接超时 单位毫秒
            conn.setReadTimeout(130000);// 读取超时 单位毫秒
    
            // 解析返回数据
            InputStream inStream = conn.getInputStream();
            StringBuilder sb = new StringBuilder();
            String line;
    
            BufferedReader br = new BufferedReader(new InputStreamReader(inStream));
            ArrayList<String> resultList = new ArrayList<>();
            while ((line = br.readLine()) != null) {
                sb.append(line);
                resultList.add(line);
            }
            String res = sb.toString();
    
            return resultList;
        }
    
        static TrustManager[] trustAllCerts = new TrustManager[] {
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        // TODO Auto-generated method stub
                    }
    
                    @Override
                    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        // TODO Auto-generated method stub
                    }
    
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        // TODO Auto-generated method stub
                        return null;
                    }
                }
        };
    
        public class NullHostNameVerifier implements HostnameVerifier {
            /*
             * (non-Javadoc)
             *
             * @see javax.net.ssl.HostnameVerifier#verify(java.lang.String,
             * javax.net.ssl.SSLSession)
             */
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                // TODO Auto-generated method stub
                return true;
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:java的https忽略证书包含账号秘密的请求代码

          本文链接:https://www.haomeiwen.com/subject/bqkcrctx.html