技术开发 频道

WebLogic Platform中的受管文件传输功能

安全性

  在 B2B 集成中,交易伙伴向 GlobalTx 发送的文件必须不会在路由时被截取或更改。在接收端,安全的文件传输意味着您可以信任传入文件的内容并允许内部应用程序自动处理这些文件。虽然 WebLogic Platform 不对安全文件传输提供内置支持,但您可以使用第三方 Java 客户端方便地创建自定义 FTP 控件,以提供 WLI流程项目可以安全使用的FTP。

  我们来探讨一下如何使用AppGate's MindTerm 创建自定义 FTP 控件。MindTerm 很可能是目前最流行的以纯 Java 编写实现 SSH1 和 SSH2 协议的客户端。请注意,与其它许多仅供评估的 API 不同,如果超过 100 个不同的用户需要使用 MindTerm,则必须购买商业许可证(有限商业使用许可证)。下文将概述在 WebLogic Workshop 内启用 MindTerm 的过程。

  首先,要将 mindterm.jar 添加到 Workshop 应用程序的库文夹中,并按照图 3 的描述创建自定义 Java 控件:



图 3. 将 mindterm.jar 添加到 WebLogic Workshop 中的库文件夹

  下面介绍用来连接到远程服务器(在此启用 SSH 并有效配置了 SFTP)的代码的 API 快照。请注意,MindTerm 支持基于主机、基于密钥和基于密码的身份验证。在本文中,我们将使用基于密码的身份验证。基于密码和基于密钥的身份验证之间的配置相似,前者似乎是两者中较小的一部分。首先,创建一个传输对象,该对象将一个 socket 实例等传送到远程机器。此类实现 SSH2 协议栈的传输层。密钥交换算法和主机密钥类型的初始协议通过以下语句处理:

SSH2Transport sshTrans = new SSH2Transport(<socket instance>, <SecureRandomAndPad-instance>.getNextInt() );

  与服务器的通信从以下语句开始:

sshTrans.boot();

  身份验证者是支持多个身份验证模块的对象,如可作为模块加入此对象的基于密码的身份验证和基于密钥的身份验证。以下是一个基于密码的身份验证模块的示例:

SSH2Authenticator sshAuth = new SSH2Authenticator(user name);

  密码存储库是 WebLogic Integration OA&M 控制台内提供的实例,可用来根据别名存储密码。以下是一种特定于 WebLogic 的从密码存储库提取密码的方法,与已知别名对应:

PasswordStore pwdStore = PasswordStore.getInstance( PasswordStore.getDefaultProvider() ); String password = pwdStore.getPassword(alias);

  此示例演示如何为提取的密码创建基于密码的身份验证模块并将其添加到用户身份验证对象:

SSH2AuthPassword authPwd = new SSH2AuthPassword (password); sshAuth.addModule(authPwd);

  此对象执行 SSH2 协议栈的用户身份验证层:

 
SSH2UserAuth sshUserAuth = new SSH2UserAuth (sshTrans, sshAuth );..... if (sshUserAuth.authenticateUser("ssh-connection" )) {

  根据以上语句,一旦身份验证成功,将获取 ssh2connection 对象。且 sshTrans 对象内将设置连接,用于连接层,如下所示:

SSH2Connection sshCon = new SSH2Connection (sshUserAuth, sshTrans); sshTrans.setConnection( sshCon );

  此处的客户端实例对象用于从远程机器检索与文件相关的信息(以及实际的文件):

SSH2SFTPClient sftpClient = new SSH2SFTPClient( sshCon, true );

  首先,为远程位置表示的目录取得文件句柄,用来获取与该目录中的文件相关的信息(从而搜索特定文件)。文件属性对象表示这样一种必然:

FileHandle fileHndle = sftpClient.opendir(<remote location>); SSH2SFTP.FileAttributes[] fileAttr = sftpClient.readdir(fileHndle);

  <file name> 表示从以上检索到的文件属性对象获取的相关单个文件。在获取文件句柄的同时,此处还提到了要对文件执行的操作:

SSH2SFTP.FileHandle fileToBeReadHndle = sftpClient.open( <remote location> + "/" + <filename>, SSH2SFTP.SSH_FXF_READ, <new file attributes instance> );

  随后,检索到文件并按如下所示加入到输出流(位于本地系统)。此语句中定义了表示该文件的文件句柄:

int bytesRead = sftpClient.readFully(fileToBeReadHndle, <buffered output stream> );

  一旦获得文件,客户端和传输对象将断开连接:

sftpClient.terminate(); } //terminates sshUserAuth.authenticateUser() sshTrans.normalDisconnect("user disconnected ..." );

  这些示例形成了为交易伙伴与 GlobalTx 的 OMS 之间提供安全文件传输(如图 2 所示)的基础解决方案。稍后我们将深入研究定时处理和转换等其它功能。

0
相关文章