1

編集: url が犯人だと思います。作業中の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: "application/text" は何ですか?

2) URL タグは正しいものですか、それともアクションを使用する必要がありますか?

3)そのような場合、パラメーターのユーザー名とパスワードはどうですか?

Glassfish は認証を試みますが、ユーザーとパスワードがありません。

4

2 に答える 2

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.htmlerror-login.htmlはまったく同じですが、

error-login.htmlに「 You are input wrong password or username」というテキストがあることを除いて

于 2015-12-25T07:52:39.550 に答える
0

contentType: "application/text" が原因です。その行をコメントアウトしただけで、すべてが機能し始めました。

まだ1つの問題があります。認証にエラーがある場合、index.html にリダイレクトされますが、css がなく、アドレス バーには、成功した場合に移動するアドレス /protected/adminWelcome.html が含まれています。

于 2013-05-30T10:37:12.430 に答える