我正在为Java Web应用程序开发一些功能,其中用户可以单击网页上的按钮并获得SFTP服务器上可用文件的列表。 SFTP服务器在公司网络之外,并且有一个HTTP代理,所有流量都必须通过该HTTP代理才能到达外部主机。
单击“加载文件列表”按钮后,将调用Javascript函数,该函数会触发jQuery AJAX请求。
function loadFilesList() {
$.ajax({
url: "FileListServlet",
type: "GET",
cache: false,
data : {
"operation" : "GET_FILES_LIST"
},
dataType: "json",
success: function(data) {
$('#filesListStatus').attr("style", "display:none");
data.FILE_NAMES_LIST.forEach(function(fileName, i) {
$('#fileSelection').append($('<option>', {
value: fileName,
text: fileName
}));
});
$('#fileSelection').attr("style", "display:inline");
},
error: function (xhr, status, error) {
$('#filesListStatus').html('<font color=\"red\">' + xhr.responseText + '</font>');
}
});
}
HTTP GET请求被传递到Java Servlet,该Java Servlet尝试使用JSch(Java安全通道)库通过HTTP代理建立到SFTP服务器的SSH连接。请注意,将FTP用户名,FTP密码,FTP主机名,FTP端口,代理用户名和代理密码称为类变量。
public void connect() throws Exception {
JSch jsch = new JSch();
session = jsch.getSession(this.ftpUsername, this.ftpHost, this.ftpPort);
session.setPassword(this.ftpPassword);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
ProxyHTTP proxy = new ProxyHTTP("proxy.company.com", 8080);
proxy.setUserPasswd(this.proxyUsername, this.proxyPassword);
session.setProxy(proxy);
session.connect();
}
在会话对象上调用connect方法时,将隐式调用代理对象的connect方法。此时,将引发错误。
java.io.IOException: proxy error: Proxy Authentication Required
我已经在代理对象上明确设置了用户名和密码,但是SSH客户端无法连接。
我尝试了其他库,例如j2ssh和sshj,但是无论我尝试使用什么库,我都看到407 Proxy Authentication Required错误。
我的代码中是否缺少某些设置?我应该注意,如果客户端和服务器都在同一台计算机上运行,则不会观察到此错误,并且文件列表已成功检索。但是,如果将应用程序部署到测试环境,则始终会生成407错误。
任何帮助将不胜感激。