2

Я хотел бы отслеживать некоторые вещи в настройке 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. Любые опубликованные события могут быть обнаружены путем предоставления реализации этого интерфейса.

  1. InteractiveAuthenticationSuccessEvent публикуется, когда клиент успешно прошел аутентификацию (т.е. ClientId существует и секретный ключ действителен)
  2. AuthenticationSuccessEvent опубликована, когда пользователь успешно прошел аутентификацию (т.е. имя пользователя существует и пароль совпадает)
  3. 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 ботинке без ручного создания Вселенной ???

+0

Используйте регистраторы, такие как log4j или slf4j (мои предпочтения) – JFPicard

+0

Я имел в виду нечто более зернистое и структурированное. Как получение имени пользователя, используемого для входа в систему, метод HTTP, используемый для запроса, и т. Д. – lpezet

ответ

2

Вы можете использовать АОП весной. Создать консультацию @Before, @After, @Arround Выполнение метода, или даже AfterThrowing, чтобы обнаружить возникшее исключение. Используя этот подход, вы можете отделить свой процесс аудита от своей бизнес-логики.

+0

Это действительно хороший способ отделить эту логику от остальных. У меня были проблемы в прошлом, когда Spring раздувалась из-за того, что прокси были проксированы другими прокси-серверами и т. Д. Я предполагаю, что я надеялся, что «ApplicationListener» использовался последовательно во всех проектах Spring (особенно Spring Security). – lpezet

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

  • Нет связанных вопросов^_^