[SPRING] 스프링 시큐리티 - 컨테이너

RuiN·2022년 7월 26일
0

서블릿 컨테이너

TomCat 과 같은 웹 어플리케이션을 서블릿 컨테이너 라고 부르는데,
이러한 웹 어플리케이션(J2EE Application)은 기본적으로 필터와 서블릿으로 구성되어 있습니다.

필터는 체인처럼 엮여있기에 필터 체인이라고도 불리는데, 모든 REQUEST는 필터체인을 받드시 거쳐야만 서블릿 서비스에 도달합니다.


BIG PICTURE

스프링 시큐리티는 DelegatingFilterProxy 라는 필터를 만들어서 메인 필터 체인에 끼워 넣고,
SecurityFilterChain 그룹을 등록하게 됩니다.

  • 여기서 필터체인은 반드시 한개 이상이고, URL 패턴에 따라 적용되는 필터체인을 다르게 할 수 있습니다.
    본래의 메인 필터를 반드시 통과해야만 서블릿에 들어갈 수 있는 단점을 보완하기 위해서 필터체인 Proxy를 두었다고 할 수 있습니다.
  • Web Resource 의 경우 패턴을 따르더라도 필터를 무시(Ignore)하고 통과시켜주기도 합니다.

FILTERS

필터체인에는 다양한 필터들이 존재합니다.

  • 하나의 필터는 하나의 책임을 가지고 각자 맡은 일을 수행하게 됩니다.
    • HeaderWriterFilter : Http 헤더를 검사
    • CorsFilter : 허가된 사이트나 Client의 요청인가..?
    • CsrfFilter : 내가 내보낸 리소스에서 올라온 요청인가...?
    • LogoutFilter : 지금 로그아웃하는건지 판단!
    • UsernamePasswordAuthenticationFilter : username과 password로 로그인하는가? 그렇다면 로그인 처리할 페이지로 보내준다.
    • ConcurrentSessionFilter : 여기저기서 로그인 할 것을 허용할까?
    • BearerTokenAuthenticationFilter : Authorization 헤더에 Bearer 토큰이 오면 인증 처리를 해준다.
    • BasicAuthenticationFilter : Authorization 헤더에 Basic 토큰이 오면 검사해서 인증처리.
    • RequestCacheAwareFilter : 방금 요청한 REQUEST 이력이 다음에 필요할 수 있으니 Cache에 저장.
    • SecurityContextHolderAwareRequestFilter : 보안 관련 Servlet 3 스펙을 지원하기위한 필터?
    • RememberMeAuthenticationFilter : 아직 Authentication 인증이 안됬다면 RememberMe 쿠키를 검사해서 인증처리.
    • AnonymousAuthenticationFilter : 아직도 인증이 안되있으면 익명유저(Anonymous User)
    • SessionManagementFilter : 서버에서 지정한 세션정책을 검사.
    • ExceptionTranslationFilter : 이 이후에 인증이나 권한 예외가 발생한다면 처리해줌.
    • FilterSecurityInterceptor : 마지막 점검!

      여기서 필터를 넣거나 뺄 수 있고, 순서도 변경할 수 있지만.
      필터의 순서는 매우 중요하기 때문에 기본 필터들은 순서가 어느정도 정해져 있다.

profile
어디까지 올라갈지 궁금한 하루

0개의 댓글