BottleH Blog

Spring Filter์™€ Interceptor

    Tags

  • Spring
Spring Filter์™€ Interceptor thumbnail

Spring Filter์™€ Interceptor

๐Ÿ› Filter

J2EE ํ‘œ์ค€์ŠคํŽ™์ธ ํ•„ํ„ฐ(Filter)๋Š” Dispatcher Servlet์— ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„์— url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์›น์ปจํ…Œ์ด๋„ˆ(WAS)์— ์˜ํ•ด ๊ด€๋ฆฌ๊ฐ€ ๋˜๋ฏ€๋กœ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๊ฐ€๊ธฐ ์ „์— ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ
  • HTTP Request โ†’ WAS โ†’ ํ•„ํ„ฐ โ†’ ์„œ๋ธ”๋ฆฟ โ†’ ์ปจํŠธ๋กค๋Ÿฌ

Filter์˜ ๋ฉ”์†Œ๋“œ

init

  • ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์„œ๋น„์Šค์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ

  • ์›น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 1ํšŒ init ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ์ดํ›„์˜ ์š”์ฒญ๋“ค์€ doFilter๋ฅผ ํ†ตํ•ด ์ „/ํ›„์— ์ฒ˜๋ฆฌ

doFilter

  • url-pattern์— ๋งž๋Š” ๋ชจ๋“  HTTP ์š”์ฒญ์ด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„์— ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์‹คํ–‰

  • doFilter์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” FilterChain์ด ์žˆ๋Š”๋ฐ, FilterChain์˜ doFilter ํ†ตํ•ด ๋‹ค์Œ ๋Œ€์ƒ์œผ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌ

destroy

  • ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์„œ๋น„์Šค์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋ฐ˜ํ™˜

  • ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด 1๋ฒˆ ํ˜ธ์ถœ๋˜๋ฉฐ ์ดํ›„์—๋Š” doFilter์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ› Interceptor

Spring์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ๋กœ์จ, ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet)์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „๊ณผ ํ›„์— ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

  • ์›น ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • HTTP Request โ†’ WAS โ†’ ํ•„ํ„ฐ โ†’ ์„œ๋ธ”๋ฆฟ โ†’ ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ โ†’ ์ปจํŠธ๋กค๋Ÿฌ

Interceptor์˜ ๋ฉ”์†Œ๋“œ

preHandle

  • ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ์‹คํ–‰

postHandle

  • ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœ๋œ ํ›„์— ์‹คํ–‰

afterCompletion

  • ๋ชจ๋“  ๋ทฐ์—์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ์„ ํฌํ•จํ•ด ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์— ์‹คํ–‰

reference: ํ† ๋น„์˜ ์Šคํ”„๋ง vol2, bryce๋‹˜ ๋ธ”๋กœ๊ทธ

Written by@BottleH
Back-End Developer

GitHub