Сохранение действий при входе в систему с помощью Spring Security

#java #spring-security

#java #spring-безопасность

Вопрос:

Как я могу проверять действия входа в систему с помощью Spring security и сохранять их в базе данных, чтобы, например, я мог получить дату последнего входа в систему для определенного пользователя? Предлагает ли spring эту функцию? Спасибо,

Комментарии:

1.Spring Security публикует различные AbstractAuthenticationEvent , например AuthenticationSuccessEvent , AuthenticationFailureBadCredentialsEvent , LogoutSuccessEvent , и т.д. Вы можете зарегистрировать an ApplicationListener @Bean , который получает уведомление при возникновении этих событий, а затем выполнить ведение журнала аудита. См. Справочный документ для ApplicationListener : docs.spring.io/spring-framework/docs/current/reference/html /…

Ответ №1:

Вы можете реализовать AuthenticationSuccessHandler, AuthenticationFailureHandler и LogoutSuccessHandler. Смотрите фиктивный код ниже для ссылки.

 @Component("myAuthenticationSuccessHandler")
public class MySimpleUrlAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
 
   
    
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication) 
      throws IOException {
        HttpSession session = request.getSession(false);
        if (session != null) {
            //update your repo or audit trail DB here.
        }
    }
}


    @Component("myLogoutSuccessHandler")
public class MyLogoutSuccessHandler implements LogoutSuccessHandler{
    @Override
    public void onLogoutSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication)
      throws IOException, ServletException {
        HttpSession session = request.getSession();
        if (session != null){
            // update DB
        }
    }
}
  

Также Spring Data JPA автоматически сохраняет столбцы CreatedBy, CreatedDate, LastModifiedBy и LastModifiedDate для любого объекта, внутренне который получает данные пользователя от участника аутентификации после успешной авторизации. Вы также можете использовать это.

Комментарии:

1. Спасибо за ваш ответ, значит, у spring нет аналогичного по умолчанию?

2. Ничего из коробки, как плагин и аннотации воспроизведения. Служит ли мой ответ вашей цели?

3. Да, ваша идея такая же, как у меня, но я подумал, что, возможно, spring предлагает ее по умолчанию. Спасибо