Spring Security 내부 구조 - 2 (SecurityFilterChain)

2025. 6. 30. 21:51·Backend/Spring Security
728x90

 

이전 글: 2025.06.30 - [Backend/Spring Security] - Spring Security 내부 구조 -1

 

Spring Security 내부 구조 -1

스프링 시큐리티 공식 문서: https://docs.spring.io/spring-security/reference/servlet/architecture.html Spring Security 동작 원리시큐리티 의존성이 없는 경우, 클라이언트의 요청은 서버 컴퓨터 WAS의 필터들을 통과

0woy.tistory.com


SecurityFilterChain

스프링 시큐리티 필터들의 묶음으로 실제 시큐리티 로직이 처리되는 부분

추후 자세히 작성 예정

 


커스텀 SecurityFilterChain 등록

  • 스프링 시큐리티 의존성을 추가하면 `DefaultSecurityFilterChain` 하나가 등록 (자동)
  • 원하는 SecurityFilterChain을 등록하기 위해서는 SecurityFilterChain을 리턴하는 @Bean 메소드를 등록하면 됨
    (한 개 이상 등록 가능)

Custom Security Filter Chain 등록


두 개 이상을 등록할 경우? =  멀티 SecurityFilterChain 경로 설정 必

FilterChainProxy는 N개의 SecurityFilterChain 중 하나를 선택해 요청을 전달한다.

Multi Security FilterChain

선택 기준은 다음과 같다.

  1. 등록 인덱스 순
  2. 필터 체인에 대한 `RequestMatcher` 값이 일치하는지 확인
📌 멀티 SecurityFilterChain 경로 설정은 필수
 SecurityFilterChain 설정 시 N개의 SecurityFilterChain 모두 `/**` 경로에서 매핑
👉 모든 요청이 첫 번째 filterChain으로만 이동하므로, 경로 설정은 필수이다.

경로 설정을 하지 않을 경우

따라서 위 오류를 없애려면 SecurityFilterChain에 대한 경로 매핑을 진행해야 함


SecurityFilterChain에 대한 경로 매핑 : sercurityMatchers

	@Bean		// /user 경로에 해당하는 요청만 받음
    public SecurityFilterChain filterChain1(HttpSecurity http) throws Exception {
        http
                .securityMatchers((auth) -> auth.requestMatchers(("/user")));
        http
                .authorizeHttpRequests((auth) -> auth
                        .requestMatchers("/user").permitAll());

        return http.build();
    }

	
    @Bean	// /tester 경로에 해당하는 요청만 받음
    public SecurityFilterChain filterChain2(HttpSecurity http) throws Exception {
        http
                .securityMatchers((auth) -> auth.requestMatchers(("/tester")));

        http
                .authorizeHttpRequests((auth) -> auth
                        .requestMatchers("/tester").permitAll());

        return http.build();
    }

특정 요청을 필터를 거치지 않도록

  • SecurtiyFilterChain을 거치게 된다면 내부적으로 여러가지 필터를 거치게 됨
  • 이때 서버의 자원 사용 및 상주 시간이 발생하므로 원하는 값은 필터를 통과하지 못하도록 설정할 수 있음
  • 보통 정적 자원 (이미지, CSS)의 경우 필터를 통과하지 않도록 아래 구문 사용
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
    return web -> web.ignoring().requestMatchers("/img/**");
}

설정 시 하나의 SecurityFilterChain이 0번 인덱스로 설정되며 하나의 필터 체인 내부에는 필터가 없는 상태로 생성


 

참고 영상

개발자 유미 - 스프링 시큐리티 내부 구조 시리즈 4~5

https://www.youtube.com/watch?v=QoPXJ2LEqTc&list=PLJkjrxxiBSFCFM0pjDwm6F98veieD0MER&index=4

 

 

728x90
'Backend/Spring Security' 카테고리의 다른 글
  • Spring Security 내부 구조 -1 (Spring Security 동작 원리)
0woy
0woy
Algorithm, CS, Web 등 배운 내용을 기록합니다.
  • 0woy
    0woy dev
    0woy
  • 전체
    오늘
    어제
  • 🌐 LANGUAGE
    • 분류 전체보기 (80)
      • Backend (21)
        • JAVA (7)
        • DB (11)
        • Spring (1)
        • Spring Security (2)
      • Computer Science (22)
        • 네트워크 (9)
        • 운영체제 (5)
        • 보안 (7)
      • Frontend (15)
        • HTML5 (1)
        • CSS (1)
        • JS (4)
        • Vue 3 (9)
      • PS (16)
        • LeetCode (2)
        • Baekjoon (1)
        • Programmers (1)
        • 알고리즘 (12)
      • Dev Trivia (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    leetcode
    Graph
    security
    set
    Props
    dfs
    https
    RDB
    그래프
    function
    Spring
    공개키
    javascript
    가용성
    shortestpath
    JDBC
    대칭키
    트리
    Vue3
    Filter
    tcp
    BFS
    JS
    비밀키
    select
    CA
    java
    DP
    속성
    PreparedStatement
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
0woy
Spring Security 내부 구조 - 2 (SecurityFilterChain)
상단으로

티스토리툴바