[스프링시큐리티] 인증/인가 관련 이벤트 처리

Welcome to Seoyun Dev Log·2024년 12월 18일
0

보안

목록 보기
13/18

AuthenticationEvents

  • 스프링 시큐리티는 인증이 성공하거나 실패하게 되면 AuthenticationSuccessEvent 또는 AuthenticationFailureEvent 를 발생시킨다
  • 이벤트를 수신하려면 ApplicationEventPublisher 를 사용하거나 시큐리티에서 제공하는 AuthenticationEventPublisher 를 사용해서 발행해야 한다
  • AuthenticationEventPublisher 의 구현체로 DefaultAuthenticationEventPublisher 가 제공된다

🚩 DefaultAuthenticationEventPublisher는 예외(실패)와 이벤트를 매핑하고 있다
예를 들어 A예외가 발생하면 a이벤트 발행
따라서 예외만 전달하더라도 해당 이벤트를 발행하도록 되어있다

이벤트 발행

  1. ApplicationEventPublisher.publishEvent(ApplicationEvent)
  2. AuthenticationEventPublisher.publishAuthenticationSuccess(Authentication) , AuthenticationEventPublisher.publishAuthenticationFailure(AuthenticationException, Authentication)

이벤트 수신

발행된 이벤트 타입을 수신에 넣어야 수신할 수 있다

@Component
public class AuthenticationEvents {
@EventListener
public void onSuccess(AuthenticationSuccessEvent success) {...}
@EventListener
public void onFailure(AbstractAuthenticationFailureEvent failures) {...} 
}

상위 이벤트는 각각의 이벤트가 수신될 때 마다 수신된다

구현


AuthenticationEventPublisher 활용

🚩 DefaultAuthenticationEventPublisher는 예외(실패)와 이벤트를 매핑하고 있다
예를 들어 A예외가 발생하면 a이벤트 발행
따라서 예외만 전달하더라도 해당 이벤트를 발행하도록 되어있다
이를 커스텀하게 만들어서 원하는 이벤트를 발행하도록 할 수 있다

//매핑
Collections.singletonMap(CustomException.class, CustomAuthenticationFailureEvent.class);

authenticationEventPublisher.setAdditionalExceptionMappings(mapping); // CustomException 을 던지면 CustomAuthenticationFailureEvent 를 발행하도록 추가 함
authenticationEventPublisher.setDefaultAuthenticationFailureEvent(CustomDefaultAuthenticationFailureEvent.class); // 기본 이벤트 설정

//발행
authenticationEventPublisher.publishAuthenticationFailure(new CustomException("CustomException "), authentication);

//수신
@EventListener
public void onFailure(CustomAuthenticationFailureEvent failures) { 
// 커스텀 예외에 대해 이벤트를 수신할 수 있다 System.out.println(" failures = " + failures.getException().getMessage());
}


Authorization Events

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글

관련 채용 정보