backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  • 1. Spring Security의 기본 동작 흐름
  • 2. 각 객체의 역할
  1. 스프링
  2. Spring Security

3. Spring Security 기본 동작 흐름

Previous보안 위협 실제 사례와 방어 전략Next4. Spring Security로 인증 권한 추가하기

Last updated 3 months ago

1. Spring Security의 기본 동작 흐름

  • Client의 요청 시작:

    • 클라이언트(예: 브라우저 또는 API 호출)가 서버로 HTTP 요청을 보냅니다.

  • FilterChain의 시작:

    • 요청은 FilterChain을 통해 처리됩니다. Spring Security는 여러 개의 Filter 객체로 구성된 필터 체인을 활용합니다.

    • Filter0와 같은 일반 필터가 먼저 실행되며, 이후 Spring Security의 주요 역할을 수행하는 DelegatingFilterProxy로 요청이 전달됩니다.

  • DelegatingFilterProxy와 FilterChainProxy:

    • Spring Security는 서블릿 컨테이너의 필터(DelegatingFilterProxy)를 이용해 요청을 Spring Security의 실제 필터 체인으로 위임합니다.

    • FilterChainProxy는 Spring Security의 핵심 역할을 담당하며, 이 단계에서 요청은 Spring Security의 SecurityFilterChain으로 위임됩니다.

  • SecurityFilterChain의 처리:

    • SecurityFilterChain은 Spring Security의 보안 로직이 포함된 필터 체인입니다.

    • SecurityFilterChain은 여러 개의 필터(SecurityFilter0, SecurityFilter1, ..., SecurityFilterN)로 구성되며, 다음과 같은 작업을 수행합니다:

      • 인증(Authentication): 요청한 사용자가 적절히 인증되었는지 확인합니다.

      • 인가(Authorization): 인증된 사용자가 해당 요청을 수행할 권한이 있는지 검증합니다.

      • 세션 관리: 사용자 세션을 확인하거나 생성합니다.

      • CSRF 방어: CSRF 공격을 방지하기 위한 검사를 수행합니다.

  • 필터 체인을 거친 후 Servlet으로 요청 전달:

    • SecurityFilterChain의 모든 필터가 요청을 처리한 뒤, 요청은 애플리케이션의 서블릿(Servlet)으로 전달됩니다.

    • 여기서 컨트롤러 또는 다른 비즈니스 로직이 실행됩니다.

  • 응답의 반환:

    • 서블릿에서 생성된 응답은 역으로 FilterChain을 거쳐 클라이언트에게 반환됩니다.

    • 이 과정에서 SecurityFilterChain이 응답을 수정하거나 추가 보안 작업을 수행할 수도 있습니다.


핵심 포인트:

  • DelegatingFilterProxy는 Spring Security의 엔트리 포인트로, Spring 컨텍스트에 정의된 FilterChainProxy를 호출하여 보안 필터 체인을 실행합니다.

  • FilterChainProxy는 등록된 SecurityFilterChain 객체들을 순서대로 실행하며, 보안과 관련된 인증, 인가, 세션 관리 등을 처리합니다.

  • Spring Security의 구조는 요청과 응답의 흐름에서 보안 계층을 추가적으로 제공하여 애플리케이션을 보호합니다.


2. 각 객체의 역할

1. Client

  • 클라이언트는 요청을 서버로 전송하는 주체입니다. 일반적으로 브라우저, 모바일 앱, 또는 API 클라이언트가 될 수 있습니다.

  • HTTP 요청이 서버로 전달되며, 이 요청은 보안 검사를 거치게 됩니다.


2. FilterChain

  • FilterChain은 Java Servlet 표준에서 제공하는 개념으로, 요청이 서블릿으로 전달되기 전에 특정 작업을 처리할 수 있도록 여러 필터를 체인처럼 연결한 구조입니다.

  • Spring Security는 이 FilterChain을 활용하여 보안 기능을 구현합니다.

  • 이 그림에서는 여러 필터(Filter0, Filter2 등) 중 하나로 DelegatingFilterProxy가 포함되어 있습니다.


3. DelegatingFilterProxy

  • DelegatingFilterProxy는 Spring Security에서 Servlet 필터와 Spring 컨텍스트를 연결하는 브릿지 역할을 합니다.

  • 실제로는 web.xml이나 Java Config에 정의된 필터로, Spring 컨텍스트 내에 있는 FilterChainProxy를 호출합니다.

  • Spring Security가 Java 표준 필터와 통합되도록 하는 핵심 컴포넌트입니다.


4. FilterChainProxy

  • FilterChainProxy는 Spring Security의 핵심 필터로, 요청을 실제로 보안 처리하는 SecurityFilterChain으로 위임합니다.

  • 요청 경로와 설정에 따라 적합한 SecurityFilterChain을 선택합니다.

    • 예: /admin 요청은 Admin 전용 필터 체인, /user 요청은 일반 사용자용 필터 체인.


5. SecurityFilterChain

  • SecurityFilterChain은 보안 관련 필터들의 체인입니다.

  • Spring Security의 모든 보안 로직은 여기에 포함된 여러 Security Filter를 통해 구현됩니다.

  • 구성 요소:

    • SecurityFilter0, SecurityFilter1, ..., SecurityFilterN: 아래와 같은 필터들이 포함될 수 있습니다.

      • AuthenticationFilter: 사용자의 인증(로그인)을 처리합니다.

      • AuthorizationFilter: 인증된 사용자의 권한을 확인합니다.

      • CsrfFilter: CSRF 공격을 방지합니다.

      • LogoutFilter: 로그아웃 요청을 처리합니다.

      • ExceptionTranslationFilter: 보안 예외를 처리합니다.

      • SessionManagementFilter: 세션을 관리하고 인증 정보를 유지합니다.


6. Filter0, Filter2 (일반 필터)

  • Filter0과 Filter2는 일반적인 서블릿 필터입니다. Spring Security와는 관계없이 추가적인 기능(예: 로깅, 요청 검증 등)을 수행할 수 있습니다.

  • 예: Gzip 필터, 요청 로깅 필터 등.


7. Servlet

  • Servlet은 애플리케이션의 비즈니스 로직이 실행되는 최종 컴포넌트입니다.

  • 보안 검사를 모두 통과한 요청이 컨트롤러나 서비스 계층으로 전달되기 전에 여기에 도달합니다.

  • Spring MVC에서는 이 Servlet이 DispatcherServlet으로 동작하며, 컨트롤러의 요청을 처리합니다.


Spring Security의 주요 필터들

Spring Security에서 자주 사용되는 필터들은 아래와 같습니다:

  1. AuthenticationFilter: 사용자의 로그인 정보(예: 아이디, 비밀번호)를 처리하고 인증 상태를 설정합니다.

  2. AuthorizationFilter: 사용자의 권한을 검사하여 리소스 접근 가능 여부를 확인합니다.

  3. CsrfFilter: CSRF 공격을 방지합니다.

  4. ExceptionTranslationFilter: 보안과 관련된 예외를 처리하고 적절한 응답을 반환합니다.

  5. SessionManagementFilter: 세션 인증 정보를 관리하고 세션 고정을 방지합니다.

  6. LogoutFilter: 로그아웃 요청을 처리하며, 인증 정보를 정리합니다.


요약

  • 클라이언트의 요청은 일반적인 FilterChain을 거쳐 DelegatingFilterProxy에 도달하며, Spring Security의 FilterChainProxy로 위임됩니다.

  • 이후 SecurityFilterChain 내의 다양한 필터들이 요청을 처리한 뒤, 요청이 Servlet으로 전달됩니다.

  • 각 객체는 요청 흐름에서 인증, 인가, 보안 관리, 응답 처리 등 중요한 역할을 수행합니다.