Я хотел бы отслеживать некоторые вещи в настройке Spring Boot/OAuth2/Java Config и сообщать об этом где-нибудь (думаю, AWS CloudWatch или Google Analytics или любые другие подобные Сервисы). Чтобы быть более точным, у меня есть сервер авторизации + ресурсов с Spring OAuth2.Лучший способ инструмента Spring Boot/Java Config Application
Тех вещей, которые я хотел бы отслеживать бы (хотя и не ограничиваясь ими):
- Войти неудачные попытки (для клиентов и пользователей)
- Входа успешных попыток (для клиентов и пользователей)
- Использование контроллеров REST (например, "/ say_hello_world")
- Исключения (кроме тех, которые аутентификации)
I Wa при добавлении javax.servlet.Filters
, но затем он становится волосатым при регистрации неудачных попыток с моим Авторизованным сервером (с использованием @EnableAuthorizationServer
и расширения AuthorizationServerConfigurerAdapter
). Я думаю, мне нужно либо прибегнуть к использованию моего пользовательского Exception Translator, либо выяснить, как установить/обернуть AuthenticationManager в ClientCredentialsTokenEndpointFilter
.
Есть ли лучший способ, чем обернуть массу вещей, чтобы собрать информацию, о которой я упоминал выше?
Update:
Как я уже говорил в комментариях, я не ищу для «Журнал дамп». Мне нужно получить, например, идентификатор пользователя, который пытался войти в систему, но не смог, или недействительный токен доступа, который был использован, и т. Д.
Я изучил код моего собственного ApplicationListener<ApplicationEvent>
, обнаружил AuthenticationFailureBadCredentialsEvent
и т.п. маршрут. Например, я могу обнаружить BadCredentialsException
, но тогда вам нужно выяснить, является ли это InvalidTokenException или другим (что является причиной этого BadCredentialsException
). Следующая проблема заключается в том, что я не могу извлечь токен доступа, который использовался и не удался. Чувствует себя неловко и взломать, чем нужно.
Я не против проходить через обручи, как эти, просто подумал, есть ли лучший способ.
Update2:
Существует одна вещь, которая помогает «слушать» к тому, что происходит в приложении Spring и это ApplicationListener
. Любые опубликованные события могут быть обнаружены путем предоставления реализации этого интерфейса.
InteractiveAuthenticationSuccessEvent
публикуется, когда клиент успешно прошел аутентификацию (т.е. ClientId существует и секретный ключ действителен)AuthenticationSuccessEvent
опубликована, когда пользователь успешно прошел аутентификацию (т.е. имя пользователя существует и пароль совпадает)AuthenticationFailureBadCredentialsEvent
издается при пользователь не прошел проверку подлинности.
Существовал проблема с № 2 и № 3 в том, что в ProviderManager NullEventPublisher настроен по умолчанию, так что я должен был изменить (Java) конфигурации, как так, чтобы эти проверки подлинности событий:
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
...
@Autowired
private AuthenticationEventPublisher authenticationEventPublisher;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.authenticationEventPublisher(authenticationEventPublisher)
...
}
...
}
Теперь остается проблема получения события, когда клиент не прошел аутентификацию.
InteractiveAuthenticationSuccessEvent
инициируется AbstractAuthenticationProcessingFilter
(который ClientCredentialsTokenEndpointFilter
распространяется) после успешной аутентификации. Но когда аутентификация завершается с ошибкой, она не публикует какое-либо событие (поскольку, по крайней мере, версия 3.0.0 - 4.0.1).
Другим способом будет настроить AuthenticationManager
так же, как я сделал выше, настраивая не- NullEventPublisher
, но, насколько я могу сказать, что нет никакого способа установки ClientCredentialsTokenEndpointFilter
в Spring ботинке без ручного создания Вселенной ???
Используйте регистраторы, такие как log4j или slf4j (мои предпочтения) – JFPicard
Я имел в виду нечто более зернистое и структурированное. Как получение имени пользователя, используемого для входа в систему, метод HTTP, используемый для запроса, и т. Д. – lpezet