Glassfish JDBCRealm Вход в систему Исключение - PullRequest
1 голос
/ 01 апреля 2011

У меня есть установка JDBCRealm в glasfish 3.1 с oracle11.Аутентификация моего веб-приложения работает нормально, но теперь я хотел бы иметь возможность реагировать, если кто-то не сможет войти в систему 3 раза подряд.Глядя на мой журнал сервера, я вижу, что каждый раз, когда происходит сбой входа в систему, регистрируется исключение:

WARNING: WEB9102: Web Login Failed:
com.sun.enterprise.security.auth.login.common.LoginException: 
Login failed: Security Exception

Ребята, знаете ли вы какой-нибудь способ перехватить его программно в моем коде Java?Я попытался погуглить, но безрезультатно.

Или, может быть, вы вообще знаете лучшее решение?Пожалуйста, поделитесь.

Спасибо, Дамо

ОБНОВЛЕНИЕ: Мне нужно перефразировать вопрос (или правильно объяснить ситуацию).Каждый раз, когда аутентификация не проходит, я хочу зарегистрировать ее в своей базе данных.Для этого мне нужно имя пользователя, временная метка и т. Д. Каждый раз, когда аутентификация не проходит, система проверяет счетчик ошибок и, если его больше 3, блокирует учетную запись пользователя.Итак, я мог бы сделать это в моем loginerror.jsp, но мне нужно имя пользователя.Не могу найти это нигде :).До сих пор я экспериментировал с фильтром, но кажется, что вы не можете фильтровать его по j_security_check url-patter (по крайней мере, в glassfish 3.1).Так что, действительно, основная проблема здесь заключается в получении имени пользователя, который не прошел регистрацию, переданного в loginerror.jsp (в любой форме: атрибут, параметр, что угодно).Пойду и поэкспериментирую с каким-нибудь java-скриптом и отправлю форму .. хе-хе.Благодаря.

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Я думаю, вы могли бы указать страницу формы ошибки в web.xml.

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

http://download.oracle.com/docs/cd/E19798-01/821-1841/bncas/index.html#6nmq2cpkm

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>file</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/error.xhtml</form-error-page>
    </form-login-config>
</login-config>
1 голос
/ 01 апреля 2011

Вы можете его поймать, только взяв логин в свои руки.Вместо отправки формы в j_security_check, вам необходимо отправить сервлет, который использует HttpServletRequest#login().

try {
    request.login(username, password);
} catch (ServletException e) {
    // Handle.
}
...