j_security_check против программной безопасности - PullRequest
4 голосов
/ 23 апреля 2011

Я создаю веб-приложение, используя jsf, ejbs и jpa. В настоящее время я использую j_security_check на основе форм для обработки аутентификации.

Мне нужно реализовать поддержку файлов cookie, то есть вариант «Запомнить меня». Также я хочу предотвратить атаки грубой силы. т.е. заблокировать определенного пользователя после 5 неудачных входов в систему.

Я понимаю, что другим вариантом будет сделать это программно, используя ServletFilters и т. Д.

Есть ли способ реализовать все это, используя j_security_check? или я должен просто переключиться назад, чтобы сделать это программно?

1 Ответ

0 голосов
/ 19 июля 2012

Это должна быть пользовательская реализация вокруг j_security_check. Вы можете прикрепить фильтр сервлетов с помощью j_security_check

<filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/j_security_check</url-pattern>
</filter-mapping>

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

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    Principal userPrincipal = null;
            String username = httpServletRequest.getParameter("j_username");
    String rememberme = httpServletRequest.getParameter("rememberme");
    chain.doFilter(request, response);
    userPrincipal = httpServletRequest.getUserPrincipal();

Помните, что для меня должны быть установлены файлы cookie, и значение переменной "Rememberme" будет доступно после завершения j_security_check. В зависимости от успеха или неудачного входа в систему можно установить cookie.

...