Spring Security 인증 이벤트

인증과 관련된 이벤트가 발생할 때 리스너를 통해 처리하는 기능을 제공해 컴포넌트 간의 느슨한 결합을 유지하는데 도움을 주는 장점을 가지고 있다.

사용할 때는 @EventListener를 사용한 메소드에 구독을 할 이벤트 객체를 매개변수로 등록한다.

@Component
public class CustomAuthenticationEventHandler {

  private final Logger log = LoggerFactory.getLogger(getClass());

  @EventListener
  //로그인 성공 이벤트 수신
  public void handleAuthenticationSuccessEvent(AuthenticationSuccessEvent event) {
    Authentication authentication = event.getAuthentication();
    log.info("Successful authentication result: {}", authentication.getPrincipal());
  }

  @EventListener
  //로그인 실패 이벤트 수신
  public void handleAuthenticationFailureEvent(AbstractAuthenticationFailureEvent event) {
    Exception e = event.getException();
    Authentication authentication = event.getAuthentication();
    log.warn("Unsuccessful authentication result: {}", authentication, e);
  }

}

HeaderWriterFilter

응답 헤더에 대한 보안 관련 헤더 추가를 담당하는 필터이다.

  • XContentTypeOptionsHeaderWriter : MIME sniffing 공격 방어
  • XXssProtectionHeaderWriter : 브라우저에 내장된 XSS(Cross-Site Scripting) 필터 활성화
  • CacheControlHeadersWriter : 캐시를 사용하지 않도록 설정
  • XFrameOptionsHeaderWriter : clickjacking 공격 방어
  • HstsHeaderWriter : HTTP 대신 HTTPS만을 사용하여 통신해야함을 브라우저에 알림 (HTTPS 설정 시 관련 헤더 추가됨)

CsrfFilter

사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격인 CSRF를 방지하기 기능을 담당하는 필터로 사용자의 세션에 임의의 토큰 값을 저장해서 사용자의 요청마다 해당 토큰 값을 전송시켜 리소스를 변경하는 요청에 대해 사용자 세션에 저장한 토큰값과 요청에 전달한 토큰 값이 일치하는 지 검증을 통해 예방한다. (타임리프를 활용한 input form 생성시 자동으로 csrf token 기능이 지원된다.)

BasicAuthenticationFilter

Basic 인증을 처리하는 필터로 HTTPS 프로토콜에서만 제한적으로 사용해야 되고 보통은 사용하지 않는다.

WebAsyncManagerIntegrationFilter

Spring MVC Async Request에서 발생하게 되는 쓰레드들 간의 SecurityContext를 공유할 수 있게 지원하는 필터이다. (@Async 어노테이션을 추가한 Service 레이어 메소드에는 적용이 안된다.)

profile
ㅇㅅㅇ

0개의 댓글