如何防止弹出基本身份验证表单

时间:2013-01-28 17:46:26

标签: java javascript jsf basic-authentication

我有一个Java应用程序,JSF使用javascript连接到需要基本身份验证的网站。

我想要帮助的事情与我在popupform中输入用户名和密码时完全相同。

我在这个主题上尝试了许多不同的方法,但没有一种方法有效。奇怪的是,ajax调用返回了一个respone,但无论如何我得到了windows安全弹出窗口。我需要缓存它吗? 例如,下面的两个代码我都无法工作。下面的一个使用base64

$.ajax(
                {
                  'password' : password,
                  'username' : username,
                  'url'      : url,
                  'type'     : 'GET',
                  'success'  : function(){ alert("success");  },
                  'error'    : function(err){ alert('Bad Login Details' + err);},
                }
              );

$.ajax({
            url : url,
            method : 'GET',
            beforeSend : function(req) {
                req.setRequestHeader('Authorization', auth);
            },
            error : function(xhr, ajaxOptions, thrownError) {

                alert('Invalid username or password. Please try again. thrownError:' + thrownError + 'xhr:' + xhr + 'ajaxOptions:'+ajaxOptions);

            },
            sucess: function(result) {
                alert('done');
            }
        });

2 个答案:

答案 0 :(得分:2)

您可以使用以下格式对URL中的基本身份验证凭据进行编码:

https://username:password@www.example.com/abc

所以以同样的方式调整你的ajax网址。

答案 1 :(得分:2)

如果您可以控制服务器端代码,则可以滚动自己的Authenticate标头,以防止浏览器弹出标准的Basic Challenge。例如,如果您的标题是:

WWW-Authenticate: Basic realm="realm here"

然后浏览器会弹出挑战。但如果你的标题是:

WWW-Authenticate: my-basic realm="insert realm"

然后浏览器不会弹出401挑战。