본문 바로가기

Language/Spring Security

인증 이벤트 - AuthenticationEventPublisher 활용

728x90

커스텀 예외 & 이벤트 추가

@Bean
public AuthenticationEventPublisher customAuthenticationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
	Map<Class<? extends AuthenticationException>, Class<? extends AbstractAuthenticationFailureEvent>> mapping =
	Collections.singletonMap(CustomException.class, CustomAuthenticationFailureEvent.class);
	
	DefaultAuthenticationEventPublisher authenticationEventPublisher = new DefaultAuthenticationEventPublisher(applicationEventPublisher);
	authenticationEventPublisher.setAdditionalExceptionMappings(mapping); // CustomException 을 던지면 CustomAuthenticationFailureEvent 를 발행하도록 추가
	
	return authenticationEventPublisher;
}
authenticationEventPublisher.publishAuthenticationFailure(new CustomException("CustomException "), authentication);
@EventListener
public void onFailure(CustomAuthenticationFailureEvent failures) { // 커스텀 예외에 대해 이벤트를 수신 가능
	System.out.println(" failures = " + failures.getException().getMessage());
}

 

기본 이벤트 설정

  • AuthenticationException 이 발생했을 때 해당 예외에 매핑 된 이벤트가 발행이 안되어 있을 경우 기본 AuthenticationFailureEvent 를 발행 및 수신 가능
@Bean
public AuthenticationEventPublisher defaulAuthenticationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
	DefaultAuthenticationEventPublisher authenticationEventPublisher = new DefaultAuthenticationEventPublisher(applicationEventPublisher);
	
	authenticationEventPublisher.setDefaultAuthenticationFailureEvent(CustomDefaultAuthenticationFailureEvent.class); // 기본 이벤트 설정
	
	return authenticationEventPublisher;
}
eventPublisher.publishAuthenticationFailure(new CustomAuthenticationException("CustomAuthenticationException"), authentication);
@EventListener
public void onSuccess(CustomAuthenticationFailureEvent failures) {// 모든 AuthenticationException 예외에 대해 이벤트를 수신 가능
	System.out.println(" failures = " + failures.getException().getMessage());
}

CustomAuthenticationException에 발행된 이벤트가 없으나 기본 이벤트인 CustomAuthenticationFailureEvent를 수신

728x90