java ftp证书过期如何忽略并连接ftp服务器

背景:
近期,因客户需要,我们需要将一些文件从阿里云的oss上复制到客户提供的ftp上,但是客户提供的ftp的证书早就过期了,用正常ftp登陆代码一直登陆超时,同事找了几天都没有解决,后来解决了,我也顺便看了一下代码,因为之前只写过https跳过ssl证书的代码,ftp也是首次碰到,下面贴下代码,防止更多道友踩坑,主要代码如下:

        try {
        // 创建OSSClient实例。
        ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
        OSSObject ossObject = ossClient.getObject(bucketName, objectName);
        // 读取文件内容。
        InputStream is = ossObject.getObjectContent();

        //创建SSL上下文
        SSLContext sslContext = SSLContext.getInstance("TLS");
        //自定义证书,忽略已过期证书
        TrustManager[] trustAllCerts = new TrustManager[1];
        TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        //初始化
        sslContext.init(null, trustAllCerts, null);

        //创建客户端,加密选择Implicit
        ftpClient = new FTPSClient(true, sslContext);
        //连接ftp
        ftpClient.connect(hostname, Integer.parseInt(port));
        //登陆ftp
        ftpClient.login(username, password);
        //创建文件夹
        ftpClient.makeDirectory("/" + meetingNo);
        //需要把文件上传到FTP哪个目录
        ftpClient.changeWorkingDirectory("/" + meetingNo);
        ftpClient.enterLocalPassiveMode();
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        ftpClient.execPBSZ(0);
        ftpClient.execPROT("P");
        //上传图片
        for (MeetingTaskWechatPhoto meetingTaskWechatPhoto : meetingTaskWechatPhotos) {
            String photoUrl = meetingTaskWechatPhoto.getPhoto_url();
            String[] split = StringUtils.split(photoUrl, "/");
            String pictureName = split[split.length - 1];
            //存储文件,成功返回true,失败false
            //以二进制形式传输

            if (ftpClient.storeFile(pictureName, is)) {
                log.info(pictureName + "上传成功");
            } else {
                log.info(pictureName + "上传失败");
            }
        }
        //断开连接
        ftpClient.disconnect();
        // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
        is.close();
        // 关闭OSSClient。
        ossClient.shutdown();

    } catch (Exception e) {
        e.printStackTrace();
        log.error("文件同步失败!");
    }
}

static class miTM implements TrustManager, X509TrustManager {
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public boolean isServerTrusted(X509Certificate[] certs) {
        return true;
    }

    public boolean isClientTrusted(X509Certificate[] certs) {
        return true;
    }

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

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

一些配置换成你们的ftp和oss的相关参数即可
踩坑之路越踩才能走的越远。
革命尚未成功,同志仍需努力,加油!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值