[Spring Security] docs: Architecture (3) - FilterChainProxy & SecurityFilterChain

2024. 8. 30. 15:02ยทSpring Boot
๋ฐ˜์‘ํ˜•

๐Ÿ”ป Spring Security docs  ๊ฒŒ์‹œ๊ธ€ ๋ชฉ์ฐจ  

๋”๋ณด๊ธฐ

1. [Spring Security] docs : Getting Started

 

[Spring Security] docs : Getting Started

Spring Security๋Š” ์ธ์ฆ, ๊ถŒํ•œ๋ถ€์—ฌ ๋ฐ ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด์•ˆ ์„ค์ •์— ์ถ”๊ฐ€์ ์œผ๋กœ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋”๋ผ๋„ ์•ˆ์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„

kiritoni.tistory.com

 

2. [Spring Security] docs : Architecture (1) - Filter

 

[Spring Security] docs : Architecture (1) - Filter

Spring Security docs Hello Spring Security :: Spring SecurityRunning Spring Boot Application $ ./mvnw spring-boot:run ... INFO 23689 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : Using generated security password: 8e557245-73e2-4286-969a

kiritoni.tistory.com

 

3. [Spring Security] docs: Architecture (2) - DelegatingFilterProxy

 

[Spring Security] docs: Architecture (2) - DelegatingFilterProxy

Spring Security docs Hello Spring Security :: Spring SecurityRunning Spring Boot Application $ ./mvnw spring-boot:run ... INFO 23689 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : Using generated security password: 8e557245-73e2-4286-969a

kiritoni.tistory.com

 

4. [Spring Security] docs: Architecture (3) - FilterChainProxy & SecurityFilterChain

 

[Spring Security] docs: Architecture (3) - FilterChainProxy & SecurityFilterChain

2024.08.29 - [Spring Boot] - [Spring Security] docs: Architecture (2) - DelegatingFilterProxy [Spring Security] docs: Architecture (2) - DelegatingFilterProxySpring Security docs Hello Spring Security :: Spring SecurityRunning Spring Boot Application $ .

kiritoni.tistory.com

 

 

 

๐ŸŒฑ Spring Security docs ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

Architecture :: Spring Security

The Security Filters are inserted into the FilterChainProxy with the SecurityFilterChain API. Those filters can be used for a number of different purposes, like authentication, authorization, exploit protection, and more. The filters are executed in a spec

docs.spring.io

 

 

FilterChainProxy

`FilterChainProxy`๋ž€ Spring Security๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŠน๋ณ„ํ•œ ํ•„ํ„ฐ๋กœ, ์—ฌ๋Ÿฌ๊ฐœ์˜ `SecurityFilterChain`์„ ์‚ฌ์šฉํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ„์ž„ํ•œ๋‹ค. 

 

FilterChainProxy

 

 

SecurityFilterChain

`SecurityFilterChain`์€ `FilterChainProxy`๊ฐ€ ํ˜„์žฌ ์š”์ฒญ์— ๋Œ€ํ•ด ์–ด๋–ค ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ถœํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์—ฌ๋Ÿฌ `SecurityFilterChain`์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ ์ฒด์ธ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒด์ธ๋“ค์€ URLํŒจํ„ด์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉ๋  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

SecurityFilterChain

 

์ผ๋ฐ˜์ ์œผ๋กœ `SecurityFilterChain`๊ณผ `FilterChainProxy`๋Š” bean์ด๋ฏ€๋กœ  `DelegatingFilterProxy`์— ๋ž˜ํ•‘๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ `SecurityFilter`๋Š” `DelegatingFilterProxy`๋Œ€์‹  SecurityFilterChain์— ๋“ฑ๋ก๋œ๋‹ค.

 


 

์ด๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

1. FilterChainProxy๋Š” ์‹œ์ž‘์ ์ด ๋œ๋‹ค. 

Spring Security์˜ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ์ด ํ•„ํ„ฐ๋ฅผ ํ†ตํ•ด ์‹œ์ž‘๋˜๋ฏ€๋กœ, ๋””๋ฒ„๊น… ์‹œ์—๋Š” `FilterChainProxy`์— ๋””๋ฒ„๊ทธ ํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

 

2. FilterChainProxy๋Š” ๋ณด์•ˆ ํ•„ํ„ฐ๋ง์˜ ์˜ ํ•ต์‹ฌ์ด๋ฏ€๋กœ, ํ•„์ˆ˜์ ์ธ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, *๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด *SecurityContext๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๋˜ํ•œ Spring Security๋ฅผ ์ ์šฉํ•˜์—ฌ * HttpFirewall ๋“ฑ ํŠน์ • ์œ ํ˜•์˜ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•œ๋‹ค. 

 

 

* ๐Ÿ” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

Spring Security๋Š” SecurityContext๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ SecurityContext๋Š” ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์š”์ฒญ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์—๋„ SecurityContext๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์œผ๋ฉด, ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ„์† ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ผ์œผํ‚ค๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `FilterChainProxy`๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ ํ›„ ํ•ญ์ƒ SecurityContext๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. 

 

 

* ๐Ÿ” SecurityContext๋ž€?

SecurityContext๋Š” Spring Security์—์„œ ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ •๋ณด์™€ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€, ์–ด๋–ค ๊ถŒํ•œ์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค. SecurityContext๋Š” `SecurityContextHolder`์— ์ €์žฅ๋˜๋ฉฐ, ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

 

 

* ๐Ÿ”  HttpFirewall์ด๋ž€?

HttpFirewall์€ HTTP์š”์ฒญ์— ๋Œ€ํ•œ ๋ณด์•ˆ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŠน์ • ์œ ํ˜•์˜ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. Spring Security๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ `StrictHttpFirewall`์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ ํ•„ํ„ฐ๋ง์„ ์ ์šฉํ•œ๋‹ค. HttpFirewall์€ HTTP ์š”์ฒญ์—์„œ ์˜์‹ฌ์Šค๋Ÿฌ์šด ํŒจํ„ด์„ ๊ฐ์ง€ํ•˜๊ณ  ์ด๋ฅผ ์ฐจ๋‹จํ•œ๋‹ค. (Path Traversal, HTTP Response Splitting, Cross-Site Scripting(XSS)) `FilterChainProxy`๋Š” HttpFirewall์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์š”์ฒญ์„ ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ฑฐ์น˜๊ธฐ ์ „์— ์ฐจ๋‹จํ•œ๋‹ค. 

 

 

3. SecurityFilterChain์˜ ํ˜ธ์ถœ ์‹œ์ ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค์ง URL์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋œ๋‹ค. ํ•˜์ง€๋งŒ `FilterChainProxy`๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, `RequestMatcher` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `HttpServletRequest`์˜ "์–ด๋– ํ•œ ์ •๋ณด"๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ž‘๋™ ๋ฐฉ์‹์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. 

 

 

๋‹ค์ค‘ SecurityFilterChain

A. ์š”์ฒญ ์ฒ˜๋ฆฌ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” `FilterChain`์— ๋”ฐ๋ผ `DelegatingFilterProxy`๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

`DelegatingFilterProxy`๋Š” ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ `FilterChainProxy`๋นˆ์„ ์ฐพ์•„ `doFilter()` ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

`FilterChainProxy`๋Š” ์š”์ฒญ URL๋ฐ ๊ธฐํƒ€ ์š”์ฒญ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ `SecurityFilterChain`์„ ๊ฒฐ์ •ํ•œ๋‹ค. 

 

 

 

B. RequestMatcher๋กœ ์ ์ ˆํ•œ SecurityFilterChain์„ ํƒ

`FilterChainProxy`๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ `SecurityFilterChain` ์ค‘, ์š”์ฒญ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ฒด์ธ์„ ์„ ํƒํ•œ๋‹ค. 

`RequestMatcher` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ URL๋ฟ๋งŒ ์•„๋‹ˆ๋ผ `HttpServletRequest`์˜ ๋‹ค๋ฅธ ํŠน์„ฑ (ํ—ค๋”, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ)์„ ๊ธฐ์ค€์œผ๋กœ `SecurityFilterChain`์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ ํƒ๋œ ์ฒซ ๋ฒˆ์งธ SecurityFilterChain๋งŒ์ด ํ˜ธ์ถœ๋˜๋ฉฐ, ๋‹ค๋ฅธ ์ฒด์ธ์€ ๋ฌด์‹œ๋œ๋‹ค. 

 

 

 

 C. SecurityFilterChain์˜ ๋‹ค์ค‘ ๊ตฌ์„ฑ 

์—ฌ๋Ÿฌ `SecurityFilterChain`์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ์ฒด์ธ์€ ์ž์‹ ๋งŒ์˜ ๋ณด์•ˆ ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

โœ… ex 1.

`/api/messages/` URL์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, `SecurityFilterChain(0)`์˜ `/api/**` ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋ฏ€๋กœ `SecurityFilterChain(0)`๋งŒ ํ˜ธ์ถœ๋œ๋‹ค. ์ด ์š”์ฒญ์€ `SecurityFilterChain(n)`์—๋„ ์ผ์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜๋˜๋Š” ์ฒด์ธ๋งŒ ์‹คํ–‰๋œ๋‹ค.

 

โœ…  ex 2.

`/messages/ ` URL์š”์ฒญ์€ `/api/**` ํŒจํ„ด์— ๋งž์ง€ ์•Š์œผ๋ฏ€๋กœ, `FilterChainProxy`๋Š” ๋‹ค๋ฅธ `SecurityFilterChain`์„ ๊ณ„์† ์‹œ๋„ํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ `SecurityFilterChain(n)`์„ ํ˜ธ์ถœํ•œ๋‹ค. 

๋ฐ˜์‘ํ˜•

'Spring Boot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Security] docs: Architecture(5) - ExceptionTranslationFilter, RequestCache, logging  (1) 2024.08.30
[Spring Security] docs : Architecture(4) : FilterChain์˜ ์—ญํ• ๊ณผ ์ˆœ์„œ, ์ปค์Šคํ…€ ํ•„ํ„ฐ  (3) 2024.08.30
[Spring Security] docs: Architecture (2) - DelegatingFilterProxy  (4) 2024.08.29
[Spring Security] docs : Architecture (1) - Filter  (0) 2024.08.29
[Spring Security] docs : Getting Started  (0) 2024.08.29
'Spring Boot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring Security] docs: Architecture(5) - ExceptionTranslationFilter, RequestCache, logging
  • [Spring Security] docs : Architecture(4) : FilterChain์˜ ์—ญํ• ๊ณผ ์ˆœ์„œ, ์ปค์Šคํ…€ ํ•„ํ„ฐ
  • [Spring Security] docs: Architecture (2) - DelegatingFilterProxy
  • [Spring Security] docs : Architecture (1) - Filter
kiritoni
kiritoni
์•ˆ๋…•ํ•˜์„ธ์š”, cool & softํ•œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์‹ถ์€ ํ† ๋‹ˆ์ž…๋‹ˆ๋‹ค!
    ๋ฐ˜์‘ํ˜•
  • kiritoni
    Code Art Online
    kiritoni
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (32)
      • ๊ฒฝํ—˜ ๋ชจ์Œ์ง‘ (5)
      • Spring Boot (9)
      • Java (0)
      • JPA (0)
      • Server (13)
      • CS (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋น…์ฑ—
    Spring boot
    ๋ฐฑ์ค€
    server
    nlb
    network
    ๊ตฌ๋ฆ„ํ†ค
    java
    gdgoc
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    AUSG
    ๊ณ ์šฉ๋…ธ๋™๋ถ€
    pfsense
    JPA
    Spring
    ubuntu
    CS
    ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ
    Linux
    be
    ๊ตฌ๋ฆ„ํ†ค๋”ฅ๋‹ค์ด๋ธŒ
    ์„œ๋ฒ„
    ํ•ด์ปคํ†ค
    backend
    ์›น
    kdt
    docker
    ๋ณด์•ˆ
    springSecurity
    springboot
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
kiritoni
[Spring Security] docs: Architecture (3) - FilterChainProxy & SecurityFilterChain
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”