Как подключить ограничитель скорости входа для Grails Spring Security, не затрагивая базу данных?

Я хотел бы добавить ограничитель скорости, который перехватывает попытки входа в систему до того, как будут выполнены какие-либо проверки в базе данных. IP-адрес и имя пользователя должны быть доступны бизнес-логике этого ограничителя. Ограничитель позволит продолжить попытку в обычном режиме, если скорость не превышена, но не в случае сбоя (он должен вернуть пользователю ошибку или позволить мне перенаправить пользователя без обращения к базе данных для попытки входа в систему).

Где правильный момент, чтобы подключить это? Обычно для таких вещей подойдет фильтр Grails, но, судя по моему чтению, вся логика Spring Security происходит до того, как сработают какие-либо фильтры Grails.

Примечание. этот вопрос не о том, как реализовать логику ограничения скорости, а о том, где и как подключить ее к Grails Spring Security.


person Peter    schedule 10.11.2015    source источник


Ответы (1)


В springsecurity вы можете добавить своего собственного провайдера. Требуется реализовать org.springframework.security.authentication.AuthenticationProvider

добавьте его как компонент Spring (resources.groovy) и добавьте его как поставщика: grails.plugin.springsecurity.providerNames = ['MutipleAttemptIntercepterProvider']

person Dennie de Lange    schedule 12.11.2015
comment
Вам нужно будет уточнить, как реализация вашего собственного поставщика может делегировать полномочия существующему, если скорость не превышена. Пример кода? - person Peter; 13.11.2015
comment
AuthenticationProvider имеет метод аутентификации (аутентификация аутентификации). если он возвращает null, он будет продолжен к следующему поставщику. @see: docs.spring.io/autorepo/docs/spring-security/3.1.7.RELEASE/ - person Dennie de Lange; 13.11.2015