Проверка подлинности прокси на JQuery AJAX-запрос - PullRequest
0 голосов
/ 29 августа 2018

Я разрабатываю некоторые функциональные возможности для веб-приложения 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 всегда генерируется.

Буду признателен за любую помощь.

...