2010-01-26 3 views
2

привет. У меня есть приложение j2ee, использующее Spring webflow и Spring Security. Я хочу реализовать блокировку учетной записи, чтобы после трехкратного отказа пароля учетная запись была заблокирована. Как это реализовать.Блокировка учетной записи Spring Security

ответ

4

Можете ли вы использовать AuthenticationFailureHandler? Этот подход был предложен в Acegi FAQ (см. Общую проблему № 3).

+0

Я зарегистрировал боб реализующий обработчик приложения и проверки для экземпляра AuthenticationFailureHandler – cedric

1

Это поведение принадлежит провайдеру аутентификации underline. Если вы используете LDAP, существует Политика паролей, то LdapAuthenticationProvider выдаст исключение, если учетная запись заблокирована.
Если ваш текущий AuthenticationProvider не имеет этой функции, тогда подкласс.

0

Вы можете использовать AuthenticationFailureHandler

public class MySimpleAuthenticationFailureHandler implements 
AuthenticationFailureHandler { 

private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 

public MySimpleAuthenticationFailureHandler() { 
     super(); 
    } 
public void onAuthenticationFailure(HttpServletRequest request, 
     HttpServletResponse response, AuthenticationException exception) 
       throws IOException, ServletException { 

    String message = ""; 

    if(exception instanceof UsernameNotFoundException) { 
     message = "UsernameNotFoundException"; 
    } else if(exception instanceof AuthenticationCredentialsNotFoundException) { 
     message = "AuthenticationCredentialsNotFoundException"; 
    }else if(exception instanceof InsufficientAuthenticationException) { 
     message = "InsufficientAuthenticationException"; 
    }else if(exception instanceof AccountExpiredException) { 
     message = "AccountExpiredException"; 
    }else if(exception instanceof CredentialsExpiredException) { 
     message = "CredentialsExpiredException"; 
    }else if(exception instanceof DisabledException) { 
     message = "DisabledException"; 
    }else if(exception instanceof LockedException) { 
     message = "LockedException"; 
    }else if(exception instanceof BadCredentialsException) { 
     message = "BadCredentialsException"; 
    }else{ 
     message = exception.getMessage(); 
    } 
    final HttpSession session = request.getSession(); 
    session.setAttribute("errorMessage", message); 
    redirectStrategy.sendRedirect(request, response, "/login?error="+message); 
} 

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