Skip to content

Latest commit

ย 

History

History
93 lines (58 loc) ยท 4.69 KB

Spring Security Filter.md

File metadata and controls

93 lines (58 loc) ยท 4.69 KB

Spring Security ํ•™์Šต

<์ถœ์ฒ˜ : Spring.io>

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์ฆ๊ณผ ์š”์ฒญ ๋‹จ์œ„ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋•Œ Client์ธก์œผ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์š”๋ฉด Filter๋ฅผ ์ง€๋‚˜๊ฐ€๊ฒŒ ๋˜๋Š” ๋•Œ FilterChainProxy๋ผ๋Š” ํ•„ํ„ฐ์—์„œ ์š”์ฒญ์„ ์ „๋‹ฌ๋ฐ›์•„ Spring Security Filters๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๋•Œ ์š”์ฒญ์€ ๋ชจ๋“  ํ•„ํ„ฐ๋ฅผ ํ†ต๊ณผํ•˜๊ณ  ๋‚œํ›„ ์ปจํŠธ๋กค๋Ÿฌ์— ๋„๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์œผ๋กœ ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Service์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— AOP๋ฅผ ํ†ตํ•ด์„œ ๋ฉ”์†Œ๋“œ ๋‹จ์œ„์˜ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Spring Security Filter Chain

https://docs.spring.io/spring-security/site/docs/3.0.x/reference/security-filter-chain.html

์ˆ˜๋งŽ์€ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋˜๋‹ค ๊ทธ ์ค‘ ๋ช‡๊ฐ€์ง€ ์ค‘์š”ํ•œ? ํ•„ํ„ฐ๋ฅผ ์„ ์ •ํ•ด๋ณด์•˜๋‹ค.

  • SecurityContextPersistenceFilter

    • ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด SecurityContextRepository์—์„œ SecurityContext๋ฅผ ๋ถˆ๋Ÿฌ์™€ SecurityContextHolder์—์„œ SecurityContext๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์ด ๋•Œ SecurityContext์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ HttpSession์— ๋ณต์‚ฌ์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • UsernamePasswordAuthenticationFilter

    • ์ธ์ฆ์ด ์‹œ์ž‘๋˜๋Š” ๊ณณ
  • ExceptionTranslationFilter

    • ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ์˜ˆ์™ธ๋ฅผ ํ•ด์„ํ•˜๋Š” ์ฑ…์ž„
  • FilterSecurityInterceptor

    • ํ—ˆ์šฉ๋œ ์š”์ฒญ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ž‘์—…์„ AccessDesicionManager์—๊ฒŒ ์œ„ํž˜ํ•˜์—ฌ ์ ‘๊ทผ ํ—ˆ์šฉ์„ ํ™•์ธ
    • ํ—ˆ๊ฐ€ ๊ฑฐ๋ถ€์‹œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ URI ์ ‘๊ทผ์„ ๋ง‰๋Š”๋‹ค

๊ณต์šฉ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ filter Debug

o.s.security.web.FilterChainProxy : /register at position 1 of 11 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
o.s.security.web.FilterChainProxy : /register at position 2 of 11 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
  • ์š”์ฒญ์ด WebAsyncManagerIntegrationFilter์™€ SecurityContextPersistenceFilter๋ฅผ ํ†ต๊ณผํ•œ๋‹ค
w.c.HttpSessionSecurityContextRepository : HttpSession returned null object for SPRING_SECURITY_CONTEXT
w.c.HttpSessionSecurityContextRepository : No SecurityContext was available from the HttpSession: org.apache.catalina.session.StandardSessionFacade@2317acfa. A new one will be created.
  • SecurityContext๋ฅผ ๊ตฌ์„ฑํ•ด์•ผํ•˜๋Š” ๋ฐ ์กด์žฌ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑํ•œ๋‹ค.
o.s.security.web.FilterChainProxy : /register at position 3 of 11 in additional filter chain; firing Filter: 'HeaderWriterFilter'
o.s.security.web.FilterChainProxy : /register at position 4 of 11 in additional filter chain; firing Filter: 'LogoutFilter'
  • logout์‹œ ์ฒ˜๋ฆฌ๋˜๋Š” ์š”์ฒญ์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค
o.s.security.web.FilterChainProxy : /register at position 5 of 11 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter'
o.s.security.web.FilterChainProxy : /register at position 6 of 11 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
o.s.security.web.FilterChainProxy : /register at position 7 of 11 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
  • ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ URL๊ณผ ์ผ์น˜ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์ง€๋‚˜์นœ๋‹ค
o.s.security.web.FilterChainProxy : /register at position 8 of 11 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
 o.s.s.w.a.AnonymousAuthenticationFilter  : Populated SecurityContextHolder with anonymous token: 'org.springframework.security.authentication.AnonymousAuthenticationToken@58ada9f6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffbcba8: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: 72AF38EE5C7AE6E7E5FBBC2DF06E80EF; Granted Authorities: ROLE_ANONYMOUS'
  • ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ์ฆ‰, ์ธ์ฆ์„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— Anonymous ์ธ์ฆ ํ† ๊ทผ์„ ์ƒ์„ฑํ•ด์„œ ๋„˜๊ธด๋‹ค
o.s.security.web.FilterChainProxy : /register at position 9 of 11 in additional filter chain; firing Filter: 'SessionManagementFilter'
  • ์„ธ์…˜ ID๊ฐ€ ์œ ํšจํ•œ์ง€ ํŒ๋‹จํ•œ๋‹ค
o.s.security.web.FilterChainProxy : /register at position 10 of 11 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
  • ์‹œํ๋ฆฌํ‹ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์„ ์žก๋Š”๋‹ค
o.s.security.web.FilterChainProxy : /register at position 11 of 11 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
o.s.s.w.u.matcher.AntPathRequestMatcher  : Checking match of request : '/register'; against '/register'
o.s.s.w.a.i.FilterSecurityInterceptor    : Secure object: FilterInvocation: URL: /register; Attributes: [permitAll]
...
  • ์š”์ฒญ์— ๋Œ€ํ•œ ํŒ๋‹จ์ด ์ด๋ฃจ์–ด์ง„๋‹ค