Повторите вход в систему с помощью управляемой контейнером безопасности - PullRequest
1 голос
/ 23 сентября 2010

У меня есть веб-приложение, развернутое на GlassFish 3.0.1, которое использует безопасность, управляемую контейнером.Это простая, стандартная реализация на основе форм, использующая j_security_check против JDBCRealm.Все, что связано с защитой приложения, - это хорошо (и я не могу поверить, что я катал свои собственные системы безопасности в прошлом).

Что я не могу понять, так это то, как бороться сслучай, когда пользователь вводит неправильный пароль.Моя страница "loginFailed.xhtml" отображается правильно, но я хотел бы затем просто перенаправить пользователя на страницу входа (по ссылке или автоматически), чтобы повторить попытку.

Когда я попробовал это сделать, ссылка на страницу login.xhtml работала нормально, но система безопасности, похоже, забыла, куда она пытается отправить пользователя после аутентификации.Когда пользователь правильно проверяет подлинность, возникает исключение, потому что система пытается загрузить несуществующую страницу (некоторая искаженная версия URL страницы входа в систему).

Полагаю, я мог бы направить пользователя обратно кдомашней страницы, и пусть они попробуют снова оттуда, но я давно не видел приложения с таким большим количеством ошибок.Все идеи и помощь с благодарностью получены ...

Ответы [ 2 ]

0 голосов
/ 16 августа 2011

Действительно, другое решение будет использовать javascript, если вы не хотите управлять входом в свой Java.

login.html (простая HTML-форма)

<form name="loginForm" method="POST" action="j_security_check">
    <input id="username" type="text" />
    <input id="password" type="password" />
    <input type="submit"value="Login" />
</form>

Тогда для error.html просто добавьте JavaScript к телу onload

function redirect() {
window.location("http://yournewurl")
}
0 голосов
/ 03 апреля 2011

Я предполагаю, что вы просто используете j_security_check на простой HTML-странице, правильно?Теперь вы можете выполнить программный вход в систему, используя метод входа HttpServletRequest #.

Вот пример.

public String login() {

    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();

    try {
        request.login(this.userName, this.password);
        return "index?faces-redirect=true";
    } catch (Exception e) {
        return "error?faces-redirect=true";
    }

Таким образом, вы можете отправлять их в любое время после входа в систему.Это просто стандартный компонент поддержки JSF с переменными имени пользователя и пароля.

h: commandButton использует этот метод входа в систему как действие jsf.

...