jQuery AJAX请求上的代理身份验证

时间:2018-08-29 03:24:31

标签: java jquery ajax proxy sftp

我正在为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错误。

任何帮助将不胜感激。

0 个答案:

没有答案