2013-08-14 4 views
0

Мое требование: я хочу заблокировать пользователя, если пользователь пытается войти в систему более 3 раз с неправильными учетными данными в сеансе. Я хочу сохранить счет в (предварительно аутентифицированной) сессии.Как сохранить количество неудачных попыток входа пользователя в сеанс весны

Я с помощью проверки подлинности форме

весна-security.xml

<security:form-login login-page="/login" default-target-url="/home" authentication-failure-url="/loginFailed" /> 
    <security:logout logout-success-url="/" /> 

Войти Контроллер:

@RequestMapping(value = "/login", method = RequestMethod.GET) 
    public ModelAndView login() throws Exception { 
    return new ModelAndView(UrlRegistry.SIMPLEFI_LOGIN_PAGE); 
    } 

    @RequestMapping(value = "/loginFailed", method = RequestMethod.GET) 
    public ModelAndView loginFailed() { 
    return new ModelAndView(UrlRegistry.SIMPLEFI_LOGIN_PAGE, "error", "true"); 
    } 

От поиска. Я узнал об использовании ApplicationListener, но там я не могу получить доступ к объекту сеанса, поэтому не могу сохранить счет.

Может ли кто-нибудь предложить, как его реализовать?

ответ

1

Вы уверены, что хотите сохранить счет в сеансе? Это может быть легко обойдено злоумышленником, просто исключив идентификатор сеанса из запросов. В любом случае, если вас это не беспокоит ...

Попробуйте реализовать пользовательский AuthenticationFailureHandler, который является интерфейсом обратного вызова, определяющим один метод: onAuthenticationFailure(). Этот метод получает как объект запроса, так и экземпляр исключения, из-за которого аутентификация терпит неудачу, поэтому она обеспечивает идеальную точку расширения для добавления вашей функциональности.

Если вы хотите сохранить стандартное поведение (перенаправить запрос на определенную страницу), не забудьте обернуть или расширить реализацию по умолчанию (SimpleUrlAuthenticationFailureHandler).

Вот некоторая помощь о том, как подключить ваш пользовательский обработчик:

<security:http ...> 
    ... 
    <security:form-login 
     authentication-failure-handler-ref="customAFH" 
    ... 
    /> 
</security:http> 

<bean id="customAFH" class="CustomAuthenticationFailureHandler"> 
    ... 
</bean> 
+0

Да, верно. Сейчас я не использую сеансы. благодаря – sabu

Смежные вопросы