[Spring Security] Security의 흐름

2023. 10. 17. 16:06·Web & Android/Spring Security
Filter

→ 서블릿 컨테이너의 Filter는 Dispatch Survlet으로 가기 전에 먼저 적용

→ client가 http request를 보낼 때 먼저 filter를 거친다는 뜻을 내포하는 그림

→ client가 보낸 http request는 여러 개의 filter를 거쳐가게 됨

→ 이러한 filter들이 여러 개로 엮여서 chain의 형태를 띈다고 하여 위의 형태를 Filter chain 이라고 부름

→ 모든 Request들은 Filter chain을 거쳐야지 servlet에 도착함

 

→ Spring Security는 Filter chain 사이에 DelegationFilterProxy 라는 것을 끼워넣어서 보안 정책을 수행함

⇒ 경우에 따라 보안 정책을 달리해야하므로 filter의 적용을 다르게 해야할 수도 있기 때문에 filter chain 사이에 그룹을 하나 끼워넣어서 경우에 따라 다른 보안 정책을 적용하겠다는 것

💡 Filter 종류
  • SecurityContextPersistenceFilter
    • SecurityContextRepository에서 SecurityContext를 로드하고 저장
  • LogoutFilter
    • Request가 로그아웃하겠다고 하는 것인지 체크
  • UsernamepasswordAuthenticationFilter
    • username / password 로 로그인을 하려고 하는지 체크하여 승인이 되면 Authentication을 부여하고 이동 할 페이지로 이동
  • HeaderWriterFilter
    • Http 헤더를 검사하여 header를 추가하거나 빼주는 역할
  • CorsFilter
    • 허가된 사이트나 클라이언트의 요청인지 검사하는 역할
  • CsrfFilter
    • 리소스를 변경하는 요청의 경우 내가 내보낸 리소스에서 올라온 요청인지 확인
  • ConcurrentSessionFilter
    • 동시 접속을 허용할지 체크
  • BearerTokenAuthenticationFilter
    • Authorization 헤더에 Bearer 토큰이 오면 인증해주는 역할
  • BasicAuthenticationFilter
    • Authorization 헤더에 Basic 토큰을 인증해주는 역할
  • RequestCacheAwareFilter
    • request한 내용을 다음에 필요할 수 있어서 Cache에 담아주는 역할. 다음 Request가 오면 이전의 Cache값을 줄 수 있음
  • SecurityContextHolderAwareRequestFilter
    • 보안 관련 Servlet 3 스펙을 지원하기 위한 필터
  • RememberMeAuthenticationFilter
    • 아직 Authentication 인증이 안된 경우라면 RememberMe 쿠키를 검사해서 인증 처리
  • AnonymousAuthenticationFilter
    • 앞선 필터를 통해 인증이 아직도 안되었으면 해당 유저는 익명 사용자라고 Authentication을 정해주는 역할 (Authentication이 Null인 것을 방지)
  • SessionManagementFilter
    • 서버에서 지정한 세션 정책에 맞게 사용자가 사용하고 있는지 검사하는 역할
  • ExcpetionTranslationFilter
    • 해당 필터 이후에 인증이나 권한 예외가 발생하면 해당 필터가 처리
  • FilterSecurityInterceptor
    • 사용자가 요청한 request에 들어가고 결과를 리턴해도 되는 권한(Authorization)이 있는지를 체크
    • 해당 필터에서 권한이 없다는 결과가 나온다면 위의 ExcpetionTranslationFilter필터에서 Exception을 처리
💡 Filter Chain 확인 방법
  • SecurityConfig 클래스 위에 @EnableWebSecurity(debug=true) 어노테이션을 붙여주면 현재 실행되는 Security Filter들을 확인할 수 있음

저작자표시 비영리 변경금지 (새창열림)

'Web & Android > Spring Security' 카테고리의 다른 글

[Spring Security] 세션과 쿠키를 이용한 인증  (0) 2023.10.17
[Spring Security] Form Login 개념 & 사용법  (1) 2023.10.17
[Spring Security] 기본 동작 구조  (0) 2023.10.17
[Spring Security] Spring Security란?  (0) 2023.10.17
[Spring Security] Authentication의 메커니즘  (0) 2023.10.17
'Web & Android/Spring Security' 카테고리의 다른 글
  • [Spring Security] 세션과 쿠키를 이용한 인증
  • [Spring Security] Form Login 개념 & 사용법
  • [Spring Security] 기본 동작 구조
  • [Spring Security] Spring Security란?
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    programmers
    Linux
    Flutter
    JPA
    DB
    Oracle
    python
    postgresql
    Spring Security
    스프링부트
    리눅스마스터 1급
    데이터
    리눅스
    springboot
    backjoon
    리눅스마스터
    시큐리티
    자바
    프로그래머스
    플러터
    Java
    baekjoon
    데이터베이스
    스프링
    스프링 부트 쇼핑몰 프로젝트 with JPA
    spring
    백준
    pcce 기출문제
    CS지식
    CS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[Spring Security] Security의 흐름
상단으로

티스토리툴바