본문 바로가기
Spring/Spring Security

SpringSecurity 이벤트 처리 - 인증 이벤트

by 롱싱싱 2024. 11. 14.

인증 이벤트 Authentication Events

  • 스프링 시큐리티는 인증이 실패하거나 성공하면 AuthenticationSuccessEvent, AuthenticationFailureEvent발생
  • 이벤트 수신 방법 - ApplicationEventPublisher, AuthenticationEventPublisher(시큐리티)를 사용해서 발생
  • DefaultAuthenticationEventPublisher - AuthenticationEventPublisher의 구현체

이벤트 발생 방법

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

이벤트 수신 방법

@EventListener 어노테이션 필요

@Component
public class AuthenticaionEvents{
	@EventListener
    public void onSuccess(AuthenticationSuccessEvent success){
    //
    }
    @EventListener
    public void onFailure(AuthenticationFailureEvent failure){
    //
    }

}

 

로그인 성공했을 때 event호출

.formLogin(form -> form
        .successHandler(new AuthenticationSuccessHandler() {
            @Override
            public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                applicationEventPublisher.publishEvent(new AuthenticationSuccessEvent(authentication));
            }
        }))

 

 

@Bean
public CustomAuthenticationProvider2 customAuthenticationProvider2(){
    return new CustomAuthenticationProvider2(applicationEventPublisher(null));
}

@Bean
public DefaultAuthenticationEventPublisher applicationEventPublisher(ApplicationEventPublisher applicationEventPublisher){
    DefaultAuthenticationEventPublisher authenticationEventPublisher
            = new DefaultAuthenticationEventPublisher(applicationEventPublisher);
    return authenticationEventPublisher;
}