#java #spring-security
#java #spring-безопасность
Вопрос:
Как я могу проверять действия входа в систему с помощью Spring security и сохранять их в базе данных, чтобы, например, я мог получить дату последнего входа в систему для определенного пользователя? Предлагает ли spring эту функцию? Спасибо,
Комментарии:
1.Spring Security публикует различные
AbstractAuthenticationEvent
, напримерAuthenticationSuccessEvent
,AuthenticationFailureBadCredentialsEvent
,LogoutSuccessEvent
, и т.д. Вы можете зарегистрировать anApplicationListener
@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 предлагает ее по умолчанию. Спасибо