Я разрабатываю некоторые функциональные возможности для веб-приложения Java, в котором пользователь может нажать кнопку на веб-странице и получить список файлов, доступных на SFTP-сервере. SFTP-сервер находится за пределами сети компании, и есть 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, который пытается использовать библиотеку JSch (Java Secure Channel) для установления SSH-соединения с SFTP-сервером через прокси-сервер HTTP. Обратите внимание, что имя пользователя 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();
}
Когда метод подключения вызывается для объекта сеанса, метод подключения объекта-посредника вызывается неявно. В этот момент выдается ошибка.
java.io.IOException: proxy error: Proxy Authentication Required
Я четко установил имя пользователя и пароль на прокси-объекте, но клиент SSH не может подключиться.
Я пробовал другие библиотеки, такие как j2ssh и sshj, но независимо от того, какую библиотеку я пробую, я вижу ошибку 407 Proxy Authentication Required.
Есть ли что-то, чего мне не хватает в плане настройки в моем коде? Следует отметить, что если клиент и сервер работают на одном компьютере, эта ошибка не наблюдается и список файлов успешно извлекается. Однако если приложение развернуто в тестовой среде, ошибка 407 всегда генерируется.
Буду признателен за любую помощь.