SFTP环境搭建及客户代码调用公共方法封装
一、背景
在开发应用软件的过程中,广泛使用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环境搭建及客户代码调用公共方法封装的更多相关文章
- FTP环境搭建及客户代码调用公共方法封装
一.背景 大型系统架构往往被分解为多个独立可运行的组件, 以满足性能.可靠性.可扩展性的需求.多个组件间的数据交互往往采用两种方式:小量数据通过Sock函数.RMI.WebService等接口方式传递 ...
- Angularjs调用公共方法与共享数据
这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...
- python web自动化测试框架搭建(功能&接口)——接口公共方法
接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...
- Angular中怎样创建service服务来实现组件之间调用公共方法
Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...
- JS常用公共方法封装
_ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||/ ...
- 改进Page Object公共方法封装(base_page)
import os from time import sleep from selenium import webdriver from selenium.webdriver.common.by im ...
- 以太坊-Win环境下remix环境搭建
一.node.js环境搭建 有多个安装方法,但是注意npm与node版本相关性较强!以下方案较为简便 1.下载网址 http://nodejs.cn/download/ 2.下载window 64位 ...
- 在javaEE下学习web(在eclipse中开发动态的WEB工程,servlet的环境搭建,及servlet的一些方法)
一个简便的方法实现javaee版的eclipse开发动态的WEB工程(javaWEB项目)1.把开发选项切换到javaEE2. 可以在window->shou view 中找到package e ...
- STM32环境搭建/学习观点/自学方法 入门必看
文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的 ...
随机推荐
- [Ccodeforces 736C] Ostap and Tree - 树形DP
给定一个n个点的树,把其中一些点涂成黑色,使得对于每个点,其最近的黑点的距离不超过K. 树形DP. 设置状态f[i][j]: 当j <= K时: 合法状态,表示i的子树中到根的最近黑点距离为j的 ...
- zip-gzip-bzip2_压缩文件
问:为什么要压缩文件? 答:方便传输,因为压缩的文件容量会比较小 存储所使用的空间也会比较小 ---> 备份 Windows里的压缩软件:WinRAR.Zip.好压.2345 ...
- Python学习/复习神器-->各种方法/技巧在哪用和典型例子(一)
就我个人在学习Python的过程中,经常会出现学习了新方法后,如果隔上几天不用,就忘了的情况,或者刚学习的更好的方法没有得到应用,还是沿用已有的方法,这样很不利于学习和掌握新姿势,从而拉长学习时间,增 ...
- ErrorKiller:Failed to decode response: zlib_decode(): data error
先更新composer自己,composer self-update 然后再更新依赖关系 composer update
- 如何使用supervisor管理你的应用
1.前言 Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是UNIX-like系统下的一个进程管理工具,不支持Windo ...
- selenium+chrome抓取淘宝搜索抓娃娃关键页面
最近迷上了抓娃娃,去富国海底世界抓了不少,完全停不下来,还下各种抓娃娃的软件,梦想着有一天买个抓娃娃的机器存家里~.~ 今天顺便抓了下马爸爸家抓娃娃机器的信息,晚辈只是觉得翻得手酸,本来100页的数据 ...
- C语言老司机学Python (五)
今天看的是标准库概览. 操作系统接口: 用os模块实现. 针对文件和目录管理,还有个shutil模块可以用. 例句: import os os.getcwd() # 返回当前的工作目录 os.chdi ...
- Dropout
参数正则化方法 - Dropout 受人类繁衍后代时男女各一半基因进行组合产生下一代的启发,论文(paper.pdf)提出了Dropout. Dropout是一种在深度学习环境中应用的正规化手段.它是 ...
- shell 脚本——判断条件
在之前的shell语言学习笔记中已经写过shell的几种判断语句及循环语句,也简单的介绍了shell语言判断语句和判断条件.在此再做进一步学习. test命令的测试功能 test命令用于检测系统文件及 ...
- 腾讯云+校园扶持计划是bug还是福利
前言 上午突然收到好友的微信消息.打开一看是关于关腾讯云"云+校园扶持计划".仔细看下了意思就是用户可以花360大洋购买腾讯云服务器配置为1核2G,1M带宽的服务器3年.(腾讯 ...