login_interceptor
๋ก๊ทธ์ธ ์ฒ๋ฆฌ - ์ธํฐ์
ํฐ
์คํ๋ง ์ธํฐ์
ํฐ
์๋ธ๋ฆฟ ํํฐ์ ๊ฐ์ด ์น ๊ด๋ จ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๊ธฐ์ ์ด๋ค. ์๋ธ๋ฆฟ ํํฐ๊ฐ ์๋ธ๋ฆฟ์ด ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ผ๋ฉด, ์คํ๋ง ์ธํฐ์ ํฐ๋ ์คํ๋ง MVC๊ฐ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ค. ์๋ธ๋ฆฟ ํํฐ์ ์คํ๋ง ์ธํฐ์ ํฐ๋ ์ ์ฉ๋๋ ์์์ ๋ฒ์, ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค.
์คํ๋ง ์ธํฐ์ ํฐ ํ๋ฆ
HTTP ์์ฒญโWASโํํฐโ์๋ธ๋ฆฟโ์คํ๋ง ์ธํฐ์ ํฐโ์ปจํธ๋กค๋ฌ์คํ๋ง ์ธํฐ์ ํฐ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ๊ณผ ์ปจํธ๋กค๋ฌ ์ฌ์ด์์ ์ปจํธ๋กค๋ฌ ํธ์ถ ์ง์ ์ ํธ์ถ ๋๋ค.
์คํ๋ง ์ธํฐ์ ํฐ๋ ์คํ๋ง MVC๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋์คํจ์ฒ ์๋ธ๋ฆฟ ์ดํ์ ๋ฑ์ฅํ๊ฒ ๋๋ค. ์คํ๋ง MVC์ ์์์ ์ด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
์คํ๋ง ์ธํฐ์ ํฐ์๋ URL ํจํด์ ์ ์ฉํ ์ ์๋๋ฐ, ์๋ธ๋ฆฟ URL ํจํด๊ณผ๋ ๋ค๋ฅด๊ณ ๋งค์ฐ ์ ๋ฐํ๊ฒ ์ค์ ํ ์ ์๋ค.
์๋ธ๋ฆฟ ํํฐ์ ๋๊ฐ์ด ์ธํฐ์ ํฐ์์ ์ ์ ํ์ง ์์ ์์ฒญ์ด๋ผ๊ณ ํ๋จํ๋ฉด ์ปจํธ๋กค๋ฌ๊น์ง ๊ฐ์ง ์๊ณ ์ธํฐ์ ํฐ์์ ๋์ ๋ผ ์๋ ์๋ค.
์คํ๋ง ์ธํฐ์ ํฐ ์ฒด์ธ
HTTP ์์ฒญโWASโํํฐโ์๋ธ๋ฆฟโ์ธํฐ์ ํฐ1โ์ธํฐ์ ํฐ2โ์ธํฐ์ ํฐ3โ์ปจํธ๋กค๋ฌ์ค๊ฐ์ ์ธํฐ์ ํฐ๋ฅผ ์์ ๋กญ๊ฒ ์ถ๊ฐํ ์ ์๋ค. ๋ก๊ทธ ์ธํฐ์ ํฐ๋ฅผ ๋จผ์ ์ ์ฉํ๊ณ ๊ทธ ๋ค์์ ๋ก๊ทธ์ธ ์ฌ๋ถ ์ธํฐ์ ํฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
์ด ๊ฒฝ์ฐ ๋ฑ๋ก๋ ์์๋๋ก
preHandle์ด ํธ์ถ๋๊ณ , ๋ฑ๋ก๋ ์ญ์์ผ๋กpostHandle๋ฐafterCompletion์ด ํธ์ถ๋๋ค๋ ๊ฒ์ ์์๋์.

์คํ๋ง ์ธํฐ์ ํฐ ์ธํฐํ์ด์ค

preHandle: ์ปจํธ๋กค๋ฌ ํธ์ถ ์ postHandle: ์ปจํธ๋กค๋ฌ ํธ์ถ ํafterCompletion: ์์ฒญ ์๋ฃ ์ดํ
์๋ธ๋ฆฟ ํํฐ์ ๊ฒฝ์ฐ ๋จ์ํ
request,response๋ง ์ ๊ณตํ์ง๋ง, ์ธํฐ์ ํฐ๋ ์ด๋ค ์ปจํธ๋กค๋ฌ(handler)๊ฐ ํธ์ถ๋๋์ง ์ ๋ณด๋ ๋ฐ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋คmodelAndView๊ฐ ๋ฐํ๋๋์ง ์๋ต ์ ๋ณด๋ ๋ฐ์ ์ ์๋ค.

์ ์ ํ๋ฆ
preHandle: ์ปจํธ๋กค๋ก ํธ์ถ ์ ์ ํธ์ถ (๋ ์ ํํ๋ ํธ๋ค๋ฌ ์ด๋ํฐ ํธ์ถ ์ ์ ํธ์ถ)preHandle์์true๋ฅผ ๋ฐํํ๋ฉด ๋ค์์ผ๋ก ์งํํ๊ณfalse๋ฅผ ๋ฐํํ๋ฉด ๋๋ ์งํํ์ง ์๋๋ค.false์ธ ๊ฒฝ์ฐ ๋๋จธ์ง ์ธํฐ์ ํฐ๋ฅผ ํฌํจํด์ ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ์ถ๋์ง ์๋๋ค. (๊ทธ๋ฆผ 1๋ฒ์์ ๋์ด๋๋ค.)
postHandle: ์ปจํธ๋กค๋ฌ ํธ์ถ ํ์ ํธ์ถ (๋ ์ ํํ๋ ํธ๋ค๋ฌ ์ด๋ํฐ ํธ์ถ ํ์ ํธ์ถ)afterCompletion: ๋ทฐ๊ฐ ๋ ๋๋ง ๋ ์ดํ์ ํธ์ถ

์์ธ ๋ฐ์ ์
preHandle: ์ปจํธ๋กค๋ฌ ํธ์ถ ์ ์ ํธ์ถpostHandle: ์ปจํธ๋กค๋ฌ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํธ์ถ๋์ง ์๋๋ค.afterCompletion: ํญ์ ํธ์ถ๋๋ค. ์์ธ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ ์ด๋ค ์์ธ๊ฐ ๋ฐ์ํ๋์ง ๋ก๊ทธ๋ก ์ถ๋ ฅํ ์ ์๋ค.์์ธ๊ฐ ๋ฐ์ํ๋ฉด
postHandle()์ ํธ์ถ๋์ง ์์ผ๋ฏ๋ก ์์ธ์ ๋ฌด๊ดํ๊ฒ ๊ณตํต ์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ฉดafterCompletion()์ ์ฌ์ฉํด์ผ ํ๋ค.์์ธ๊ฐ ๋ฐ์ํ๋ฉด
afterCompletion()์ ์์ธ ์ ๋ณด(ex)๋ฅผ ํฌํจํด์ ํธ์ถ๋๋ค,
์คํ๋ง ์ธํฐ์
ํฐ - ์์ฒญ ๋ก๊ทธ
LogInterceptor
request.setAttribute(LOG_ID, uuid);์๋ธ๋ฆฟ ํํฐ์ ๊ฒฝ์ฐ ์ง์ญ๋ณ์๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง ์คํ๋ง ์ธํฐ์ ํฐ๋ ํธ์ถ ์์ ์ด ์์ ํ ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์
preHandle์์ ์ง์ ํ ๊ฐ์postHandle,afterCompletion์์ ํจ๊ป ์ฌ์ฉํ๋ ค๋ฉด ์ด๋๊ฐ์ ๋ด์๋์ด์ผ ํ๋ค. ์ธํฐ์ ํฐ ์ญ์ ์ฑ๊ธํค์ฒ๋ผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ํํ๋ค.ThreadLocal์ ์ฌ์ฉํ ์๋ ์๋ค.
afterCompletion์ ์์ธ๊ฐ ๋ฐ์ํด๋ ํธ์ถ์ด ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ ์ข ๋ฃ ๋ก๊ทธ๋ฅผafterCompletion์์ ์คํํ๋ค.ํํฐ์ ๋น๊ตํด๋ณด๋ฉด ์ธํฐ์ ํฐ๋ ๋งค์ฐ ์ ๋ฐํ๊ฒ URL ํจํด์ ์ง์ ํ ์ ์๋ค. (PathPattern ๊ณต์ ๋ฌธ์)
preHandle๋ฉ์๋์๋RequestMappingHandlerMappingํด๋์ค๋ก๋ถํฐ ์์ฑ๋HandlerMethod๊ฐ์ฒด๊ฐ ์ ๋ฌ๋๋ค.์ด ๊ฐ์ฒด๋ฅผ ํ์ฉํด์ ๋ค์ํ ์ ์ฒ๋ฆฌ ์์ ์ ๊ณตํต์ผ๋ก ์ํํ ์ ์๋ค.
๋ค๋ง ์ ์์ ์ ๊ฐ์ ๊ฒฝ์ฐ ์ธํฐ์ ํฐ๋ฅผ ๋ณด์ ๊ณ์ธต์ผ๋ก ์ฌ์ฉํ๋๋ฐ ์ด๋ฌํ ๋ณด์ ์์ ์ Spring Security ๋๋ ์๋ธ๋ฆฟ ํํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
postHandle๋ฉ์๋์๋RequestMappingHandlerAdapterํด๋์ค ์คํ ํ ๋ฐํ๋ModelAndView๊ฐ์ฒด๊ฐ ์ ๋ฌ๋๋ค.์ด ๊ฐ์ฒด๋ฅผ ํ์ฉํด์ ๋ค์ํ ํ์ฒ๋ฆฌ ์์ ์ ๊ณตํต์ผ๋ก ์ํํ ์ ์๋ค.
WebConfig (์ธํฐ์ ํฐ ๋ฑ๋ก)
์คํ๋ง ์ธํฐ์
ํฐ - ์ธ์ฆ ์ฒดํฌ
LoginCheckInterceptor
WebConfig
์ธ์ฆ์ ์ปจํธ๋กค๋ฌ ํธ์ถ ์ ์๋ง ํธ์ถ๋๋ฉด ๋๊ธฐ ๋๋ฌธ์ preHander๋ง ๊ตฌํํ๋ฉด ๋๋ค.
ArgumentResolver ํ์ฉ
@Login ์ด๋ ธํ ์ด์
@Target(ElementType.PARAMETER): ํ๋ผ๋ฏธํฐ์๋ง ์ฌ์ฉ@Retention(RetentionPolicy.RUNTIME): ๋ฐํ์๊น์ง ์ด๋ ธํ ์ด์ ์ ๋ณด๊ฐ ๋จ์์์
LoginMemberArgumentResolver
supportsParameter():@Login์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด์Memberํ์ ์ด๋ฉด ํด๋นArgumentResolver๊ฐ ์ฌ์ฉ๋๋ค.resolveArgument(): ์ปจํธ๋กค๋ฌ ํธ์ถ ์ง์ ์ ํธ์ถ ๋์ด์ ํ์ํ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ์์ฑํด์ค๋ค. ์คํ๋ง MVC๋ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด์ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ์ ์ ๋ฌํด์ค๋ค.
WebConfig
์ปจํธ๋กค๋ฌ
์ธํฐ์
ํฐ ๋ด๋ถ ํธ์ถ ๊ณผ์

RequestMappingHandlerMappingํด๋์ค๋ฅผ ํตํด ํธ๋ค๋ฌ๋ฅผ ๊ฐ์ ธ์ฌ ๋HandlerExecutionChain๊ฐ์ฒด๋ก ๋ฐ๋๋ฐ, ์ด ๊ฐ์ฒด ์์๋ ํธ๋ค๋ฌ ์ ๋ณด์ ์ธํฐ์ ํฐ ์ ๋ณด๊ฐ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค. (์ฐธ๊ณ )HandlerExecutionChain๊ฐ์ฒด๋ ๋ฑ๋ก๋ ์ธํฐ์ ํฐ๋ค์ ๊ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ญํ ์ ๊ฐ์ง๊ณ ์๋ค.


์ดํ ํธ์ถ ์์๋ฅผ ๋ณด๋ฉด
HandlerAdapter์๊ฒ ์์ฒญ์ ๋๊ธฐ๊ธฐ ์ ์ ์ธํฐ์ ํฐ์preHandle์ ํธ์ถํ๋ค. ํ๋์ ์ธํฐ์ ํฐ๋ผ๋preHandle์์false๋ฅผ ๋ฐํํ๋ฉด ์ดํ ์๋ฌด๊ฒ๋ ์งํ๋์ง ์๋๋ค.HandlerAdapter์ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๋๋๊ณ ๋๋ฉด ์ธํฐ์ ํฐ์postHandle์ ํธ์ถํ๋ค.afterCompletion์ ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ํญ์ ํธ์ถํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

applyPreHandle๋ฉ์๋๋ฅผ ๋ณด๋ฉด ๋ฑ๋ก๋ ์ธํฐ์ ํฐ ์์๋๋กpreHandle์ ํธ์ถํ๋ค.์ฌ๊ธฐ์ ํ๋์ ์ธํฐ์ ํฐ์์
false๋ฅผ ๋ฐํํ๋๋ผ๋ ํญ์afterCompletion์ ํธ์ถํ๋ค.

applyPostHandle๋ฉ์๋๋ฅผ ๋ณด๋ฉด ๋ฑ๋ก๋ ์ธํฐ์ ํฐ์ ์ญ์์ผ๋กpostHandle์ ํธ์ถํ๋ค.

triggerAfterCompletion๋ฉ์๋๋ฅผ ๋ณด๋ฉดpreHandle์์ ๋ง์ง๋ง์ผ๋กtrue๋ฅผ ๋ฐํํ ์ธํฐ์ ํฐ๋ถํฐ ์ญ์์ผ๋กafterCompletion์ ํธ์ถํ๋ค.

๋ทฐ์ ๋ ๋๋ง ๊ณผ์ ์ด ๋ชจ๋ ๋๋๊ณ ๋์๋ ์ ๋ฉ์๋๋ ํธ์ถ๋๋ค.

Last updated