java springCloud控制层访问https下的html文件并以流显示到页面

54 篇文章 1 订阅

目标:java controller访问https://xxxx/xxxx.html,以流的形式直接返回该页面

1.添加信任管理器类

public class MyX509TrustManager implements X509TrustManager {

    // 检查客户端证书
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    // 检查服务器端证书
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    // 返回受信任的X509证书数组
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public class TrustAnyHostnameVerifier implements HostnameVerifier {
        @Override
        public boolean verify(String s, SSLSession sslSession) {
            // 直接返回true:默认所有https请求都是安全的
            return true;
        }
    }
}

2.controller

@Override
    public String getRobotPage(HttpServletResponse response, String url){
       
		try{
                response.setContentType("multipart/form-data");
                response.setCharacterEncoding("UTF-8");
                response.setContentType("text/html");
                // 2.设置文件头:最后一个参数是设置下载文件名
                ServletOutputStream out;
                //访问https下的文件
                // 创建SSLContext
                SSLContext sslContext = SSLContext.getInstance("SSL");
                TrustManager[] tm = { new MyX509TrustManager() };
                // 初始化
                sslContext.init(null, tm, new java.security.SecureRandom());
                ;
                // 获取SSLSocketFactory对象
                SSLSocketFactory ssf = sslContext.getSocketFactory();
                // url对象
                URL url = new URL(url);
                // 打开连接
                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
                /**
                 * 这一步的原因: 当访问HTTPS的网址。您可能已经安装了服务器证书到您的JRE的keystore
                 * 但是服务器的名称与证书实际域名不相等。这通常发生在你使用的是非标准网上签发的证书。
                 *
                 * 解决方法:让JRE相信所有的证书和对系统的域名和证书域名。
                 *
                 * 如果少了这一步会报错:java.io.IOException: HTTPS hostname wrong: should be localhost
                 */
                conn.setHostnameVerifier(new MyX509TrustManager().new TrustAnyHostnameVerifier());
                // 设置一些参数
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("GET");
                // 设置当前实例使用的SSLSoctetFactory
                conn.setSSLSocketFactory(ssf);
                conn.connect();

                InputStream inputStream = conn.getInputStream();
                // 3.通过response获取ServletOutputStream对象(out)
                out = response.getOutputStream();

                int b = 0;
                byte[] buffer = new byte[1024];
                while ((b = inputStream.read(buffer)) != -1) {
                    // 4.写到输出流(out)中
                    out.write(buffer, 0, b);
                }
                inputStream.close();
                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                return "<p style='color:red;text-align:center'>默认界面未找到</p>";
            } catch (IOException e) {
                System.out.println("=========="+e.getMessage());
                return "<p style='color:red;text-align:center'>界面加载失败</p>";
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (KeyManagementException e) {
                e.printStackTrace();
            }
        return "";
    }

运行效果:当调用这个接口时直接返回页面
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值