개발 일기

[Spring Security] SecurityFilterChain 내부 구조 본문

Back-End/Spring

[Spring Security] SecurityFilterChain 내부 구조

개발 일기장 주인 2024. 5. 2. 23:11

이전 게시글에 이어 SecurityFilterChain의 내부 구조에 대해 정리해보겠다.

 

우선 SecurityConfig에 @EnableWebSecurity(debug = true)를 달아놓고 요청을 보내보면 

@EnableWebSecurity(debug = true) 로그

다음과 같이 로그가 찍힌다. 

실제로 통과하는 로그가 찍히는 것이다. 왼쪽은 SecurityFilterChain을 지정해놓지 않고 돌렸을때 오른쪽은 선언 후 돌렸을 때이다.

즉, 디폴트로 저러한 필터들이 동작하고 있다는 것이다. 

기본으로 설정된 필터들 중 쓰고 싶지 않은 것은 비활성화 시키고 쓰고 싶은 것 중 디폴트가 아닌 필터는 직접 활성화 시켜야한다.

 

앞으로 실제로 사용할때마다 하나씩 정리해보겠다.

  • DisableEncodeUrlFilter
    URL로 간주되지 않는 부분을 포함하지 않도록 설정
  • WebAsyncManagerIntegrationFilter
    비동기로 처리되는 작업에 대해 알맞은 시큐리티 컨텍스트(세션)을 적용
  • SecurityContextHolderFilter
    접근한 유저에 대해 시큐리티 컨텍스트 관리
  • HeaderWriterFilter
    보안을 위한 응답 헤더 추가 (X-Frame-Options, X-XSS-Protection and X-Content-Type-Options)
  • CorsFilter
    CORS 설정 필터
  • CsrfFilter
    CSRF 방어 필터
  • LogoutFilter
    로그아웃 요청 처리 시작점 GET : “/logout”
  • UsernamePasswordAuthenticationFilter
    username/password 기반 로그인 처리 시작점 POST : “/login”
  • DefaultLoginPageGeneratingFilter
    기본 로그인 페이지 생성 GET : “/login”
  • DefaultLogoutPageGeneratingFilter
    기본 로그아웃 페이지 생성 GET : “/logout”
  • BasicAuthenticationFilter
    http basic 기반 로그인 처리 시작점
  • RequestCacheAwareFilter
    이전 요청 정보가 존재하면 처리 후 현재 요청 판단
  • SecurityContextHolderAwareRequestFilter
    ServletRequest에 서블릿 API 보안을 구현
  • AnonymousAuthenticationFilter
    최초 접속으로 인증 정보가 없고, 인증을 하지 않았을 경우 세션에 익명 사용자 설정
  • ExceptionTranslationFilter
    인증 및 접근 예외에 대한 처리
  • AuthorizationFilter
    경로 및 권한별 인가 (구. filterSecurityIntercepter)
//특정 필터 이전
http
        .addFilterBefore(추가할필터, 기준 필터.class);

//특정 필터 위치
http
        .addFilterAt(추가할필터, 기준 필터.class);

//특정 필터 이후
http
        .addFilterAfter(추가할필터, 기준 필터.class);