j_security_check с помощью ajax

РЕДАКТИРОВАТЬ: я думаю, что 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) Каков правильный тип содержимого: «приложение/текст»?

2) Является ли тег URL правильным или мне следует использовать действие?

3) Как быть с параметрами username и password в таком случае?

Glassfish пытается аутентифицироваться, но нет пользователя и пароля.


person Sami    schedule 29.05.2013    source источник
comment
Старый, так что только для тех, кто заинтересован: 1) Вам нужно сначала перейти на безопасную страницу, прежде чем вход в систему будет работать (контейнер должен инициировать процесс входа в систему). 2. Ответом на неудачный вход в систему является перенаправление на URL-адрес ошибки, поэтому вам нужно проверить это в ответе ajax. 3. Content-Type должен быть x-www-form-urlencoded (обычная запись HTML-формы)   -  person Stijn de Witt    schedule 03.02.2016


Ответы (2)


contentType: "приложение/текст" является виновником. Я просто прокомментировал эту строку, и все заработало.

Одна проблема все же есть. Когда возникает ошибка аутентификации, он перенаправляется на index.html, но css отсутствует, а адресная строка включает адрес, по которому он должен идти в случае успеха /protected/adminWelcome.html.

person Sami    schedule 30.05.2013

Я добавляю этот код в файл 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 содержит текст "Вы ввели неправильный пароль или имя пользователя"

person vanduc1102    schedule 25.12.2015