一、背景

在开发应用软件的过程中,广泛使用FTP在各子系统间传送文本数据。但FTP存在安全问题,开放到外网存在安全漏洞,容易被攻击。替换方案是使用SFTP,SFTP提供更高的安全性,当然传输的效率也会有影响。实际使用中使用FTP还是SFTP需要根据系统使用的环境综合评估决定。
本文档在继上一篇描述了FTP环境构建的基础上,进一步描述SFTP的环境构建和客户端调用公共方法的封装。

二、SFTP Server环境搭建

SFTP服务端工具很多。作为研究用,选择 Core FTP Server,工具小巧使用简单(选择的是免费min版,只同时支持一个客户端连接)。
下载链接:http://www.coreftp.com/server/index.html

三、客户端调用公共基础类封装

3.1 添加jsch-0.1.51.jar

3.2 公共代码封装

/**
 *
 * SFTP访问公共类
 *
 * @author elon
 * @version 1.0, 2015年10月31日
 */
public class SFTPUtility
{
    // SFTP连接参数
    private String sftpIP;
    private int sftpPort;
    private String userName;
    private String password;

    // 超时时间
    private int timeout;

    // SFTP会话
    private Session sftpSession;

    // SFTP通道
    private ChannelSftp sftpChannel;

    public SFTPUtility(String sftpIP, int sftpPort, String userName, String password, int timeout)
    {
        this.sftpIP = sftpIP;
        this.sftpPort = sftpPort;
        this.userName = userName;
        this.password = password;
        this.timeout = timeout;

        sftpSession = null;
        sftpChannel = null;
    }

    /**
     *
     * 链接SFTP服务器。
     *
     * @throws JSchException
     * @throws SftpException
     */
    public void connect() throws JSchException, SftpException
    {
        JSch jsch = new JSch();

        // 创建会话连接
        sftpSession = jsch.getSession(userName, sftpIP, sftpPort);

        // 设置密码
        sftpSession.setPassword(password);

        sftpSession.setConfig("StrictHostKeyChecking", "no");

        sftpSession.setTimeout(timeout);

        // 创建会话
        sftpSession.connect();

        // 打开SFTP通道
        sftpChannel = (ChannelSftp)sftpSession.openChannel("sftp");
        sftpChannel.connect();
        sftpChannel.setFilenameEncoding("UTF-8");
    }

    /**
     * 上传文件到SFTP服务器
     * @param localFilePath 待上传的本地文件完整路径
     * @param sftpFileName 上传后保存到SFTP服务器的名称(一般和本地文件名一致)
     * @throws SftpException
     * @throws IOException IO异常
     */
    public void upLoadFile(String localFilePath, String sftpFileName) throws SftpException
    {
        sftpChannel.put(localFilePath, sftpFileName);
    }

    /**
     * 从SFTP服务器下载文件到本地。
     * @param sftpFileName 所下载文件在FTP服务器上的名称
     * @param localFilePath 下载后文件保存的完整路径(文件名一般和SFTP上保存的文件一致)
     * @throws SftpException
     * @throws IOException IO异常
     */
    public void downLoadFile(String sftpFileName, String localFilePath) throws SftpException
    {
        sftpChannel.get(sftpFileName, localFilePath);
    }

    /**
     * 关闭SFTP连接
     * @throws IOException
     */
    public void disconnet() throws IOException
    {
        if (sftpChannel != null)
        {
            sftpChannel.disconnect();
        }

        if (sftpSession != null)
        {
            sftpSession.disconnect();
        }
    }
}

四、测试函数

public class TestMain
{
    public static void main(String[] args) throws JSchException, SftpException, IOException
    {
        SFTPUtility sftp = new SFTPUtility("10.70.69.69", 22, "sftp", "sftp", 100000);

        sftp.connect();

        sftp.upLoadFile("D:/TEMP/V1R2C10分配 - 副本.xlsx", "V1R2C10分配 - 副本.xlsx");
        sftp.downLoadFile("V1R2C10分配 - 副本.xlsx", "D:/TEMP/V1R2C10分配 - 副本 new.xlsx");

        sftp.disconnet();
    }
}

SFTP环境搭建及客户代码调用公共方法封装的更多相关文章

  1. FTP环境搭建及客户代码调用公共方法封装

    一.背景 大型系统架构往往被分解为多个独立可运行的组件, 以满足性能.可靠性.可扩展性的需求.多个组件间的数据交互往往采用两种方式:小量数据通过Sock函数.RMI.WebService等接口方式传递 ...

  2. Angularjs调用公共方法与共享数据

    这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...

  3. python web自动化测试框架搭建(功能&接口)——接口公共方法

    接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...

  4. Angular中怎样创建service服务来实现组件之间调用公共方法

    Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...

  5. JS常用公共方法封装

    _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||/ ...

  6. 改进Page Object公共方法封装(base_page)

    import os from time import sleep from selenium import webdriver from selenium.webdriver.common.by im ...

  7. 以太坊-Win环境下remix环境搭建

    一.node.js环境搭建 有多个安装方法,但是注意npm与node版本相关性较强!以下方案较为简便 1.下载网址 http://nodejs.cn/download/ 2.下载window 64位 ...

  8. 在javaEE下学习web(在eclipse中开发动态的WEB工程,servlet的环境搭建,及servlet的一些方法)

    一个简便的方法实现javaee版的eclipse开发动态的WEB工程(javaWEB项目)1.把开发选项切换到javaEE2. 可以在window->shou view 中找到package e ...

  9. STM32环境搭建/学习观点/自学方法 入门必看

    文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的 ...

随机推荐

  1. 正则表达式的方法:replace,match,test(replace参数可以是回调函数)

    1.replace: 作用对象:字符串 功能:用于替换字符串中的某些字符 参数:(1)正则表达式 (2)要替换的字符串 或者 回调函数 var str="1 2 3 4 5 6 7 8 9& ...

  2. Smarty3.1.3安装使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Verdana } span.s1 { } Smarty简介 Smarty是一个PHP的模板引 ...

  3. wamp server环境下mysql数据库的密码为什么修改不了?

    每次这个控制台,不输入密码可以直接用,用root登录都登录不了.修改root密码也修改不了.困惑? 经过不断的尝试终于找到解决的办法: 1,在mysql的配置文件my.ini的末尾添加 skip-gr ...

  4. Mysql引擎中MyISAM和InnoDB的区别有哪些?

    简单的概括一下 InnoDB:支持事务处理等不加锁读取支持外键支持行锁不支持FULLTEXT类型的索引不保存表的具体行数,扫描表来计算有多少行DELETE 表时,是一行一行的删除InnoDB 把数据和 ...

  5. nyoj 1022 合纵连横 经典并查集

    思路:关键在于并查集的删点操作. 给每个诸侯国一个另外的编号,比如box[i]表示诸侯国i现在处于第box[i]个联盟,可以随时改变它的联盟编号,并且让box[i] = k, 实现删除操作.以前联盟中 ...

  6. 用线性单元(LinearUnit)实现工资预测的Python3代码

    功能:通过样本进行训练,让线性单元自己找到(这就是所谓机器学习)工资计算的规律,然后用两组数据进行测试机器是否真的get到了其中的规律. 原文链接在文尾,文章中的代码为了演示起见,仅根据工作年限来预测 ...

  7. 统计表中 重复出现 XX次以上的数据

    在平时使用数据库查询数据时 经常会遇到查询表中出现XX次以上的数据  以前自己遇到就直接百度  然后拿来就用  在过段时间遇到就懵逼了 还得百度.... so  还是加深理解下  省的以后遇到再次一脸 ...

  8. 浏览器兼容的JS写法总结

    一.元素查找问题 1. document.all[name]   (1)现有问题:Firefox不支持document.all[name]   (2)解决方法:使用getElementsByName( ...

  9. 【前端】nodejs的ORM框架sequelize的工厂化

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/sequelize_factory.html 一.什么是sequelize nodejs的后台在操作数据库的时候,需 ...

  10. 嵌入式linux------SDL移植(am335x下显示bmp图片)

    #include<stdio.h> #include "/usr/local/ffmpeg_arm/include/SDL/SDL.h" char *bmp_name[ ...