j_security_check with ajax

时间:2013-05-29 19:29:15

标签: javascript ajax authentication j-security-check

编辑:我认为网址是罪魁祸首。在使用login.html的情况下,我得到了日志:

FINE:安全检查请求POST / SesamaMaven / protected / admin / j_security_check

在AJAX版本中我得到了:

FINE:安全检查请求POST / SesamaMaven /

我在Glassfish中使用JDBCRealm配置了身份验证,它似乎正常使用正常的login.html:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login Form</title>
</head>

<body>
<form method="post" action="j_security_check">
<p>You need to log in to access protected information.</p>
<table>
<tr>
  <td>User name:</td>
  <td><input type="text" name="j_username" /></td>
</tr>
<tr>
  <td>Password:</td>
  <td><input type="password" name="j_password" /></td>
</tr>
</table>
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>

我的问题是,当我尝试用AJAX实现它时,它无法正常工作。是否有可能实现这一目标?

HTML

<form class="navbar-form pull-right">
    <input class="span2" type="text" placeholder="Email" name="j_username" id="username">
    <input class="span2" type="password" placeholder="Password" name="j_password" id="password">
    <button type="button" class="btn" id="btnSignIn">Sign in</button>
</form>

JS

 $('#btnSignIn').click(function() {


$.ajax({
                type: "POST",
                contentType: "application/text",
                url: "j_security_check",
                // This is the type what you are waiting back from the server
                dataType: "text",
                async: false,
                crossDomain: false,
                data: {
                    j_username: "admin",
                    j_password: "paSSWORD"
                },
                success: function(data, textStatus, xhr) {
                    alert('Thanks for your signin in! ' + xhr.status);
                    window.location = "/SesamaMaven/protected/adminWelcome.html";
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    console.log(textStatus, errorThrown);
                    window.location = "/SesamaMaven/index.html";
                    alert(' Error in signIn-process!! ' + textStatus);
                }


            });
        });

问题

1)什么是正确的contentType:&#34;应用程序/文本&#34;?

2)URL标记是正确的还是我应该使用动作?

3)参数用户名和密码怎么样呢?

Glassfish尝试进行身份验证,但没有用户和密码。

2 个答案:

答案 0 :(得分:0)

contentType:“应用程序/文本”是罪魁祸首。我只是评论说,线路一切都开始工作了。

还有一个问题。当身份验证中出现错误时,它会重定向到index.html,但没有css,地址栏包含应该成功进入的地址/protected/adminWelcome.html。

答案 1 :(得分:0)

我在 login.html 文件中添加了这些代码。

在开发过程中,我懒得输入用户名和密码

xhttp.open("POST", "j_security_check", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("j_username=MY_USERNAME&j_password=MY_PASSWORD");
location.reload(true);

看来,当你输入错误的凭证时,你会尝试输入用户。

在我的情况下,我的 login.html error-login.html 完全相同,

error-login.html 有文字“您输入错误的密码或用户名