๐ Interceptor (HandlerInterceptor)
๐ ๊ฐ์
- Spring MVC์์ ์ปจํธ๋กค๋ฌ ์คํ ์ /ํ ๋ฐ ์์ฒญ ์๋ฃ ํ ์ถ๊ฐ ๋ก์ง์ ์คํํ ์ ์๋ ์ปดํฌ๋ํธ
- Servlet Filter์ ์ ์ฌํ์ง๋ง ์คํ ์์ ๊ณผ ํ์ฉ ๋ฒ์๊ฐ ๋ค๋ฆ
- ์ธ์ฆ, ๋ก๊น , ์ฑ๋ฅ ์ธก์ , ๊ณตํต ์ ์ฒ๋ฆฌ/ํ์ฒ๋ฆฌ์ ์ฌ์ฉ
โ๐ป ํ์ค ์์ฝ
์ปจํธ๋กค๋ฌ ์คํ ์ ยทํ, ์๋ต ์ง์ ์ ์ํ๋ ๋ก์ง์ ์ฝ์ ํ ์ ์๋ Spring MVC์ ํ์ฅ ์ง์
๐ค ์ ํ์ํ๊ฐ?
- ์ธ์ฆยท์ธ๊ฐ ๋ก์ง ๊ณตํตํ
- ๋ก๊น , ํธ๋์ญ์ , ์ฑ๋ฅ ์ธก์ ๋ฑ ํก๋จ ๊ด์ฌ์ฌ ์ฒ๋ฆฌ
- ํน์ URL ํจํด์ ๋ํ ์ ์ญ ์ฒ๋ฆฌ ์ ์ฉ
- ๋น์ฆ๋์ค ์ฝ๋์ ๊ธฐ์ ์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌ
โ๏ธ ์ฃผ์ ๊ตฌ์ฑ ์์
1. ์ธํฐํ์ด์ค
org.springframework.web.servlet.HandlerInterceptor
Method | ์คํ ์์ | ์ค๋ช |
---|---|---|
preHandle | ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ์คํ ์ | ์์ฒญ ๊ฐ๋ก์ฑ๊ธฐ, ์ธ์ฆยท๊ฒ์ฆ ์ํ. false ๋ฐํ ์ ์์ฒญ ์ค๋จ |
postHandle | ์ปจํธ๋กค๋ฌ ์คํ ํ, View ๋ ๋๋ง ์ | ๋ชจ๋ธ ๋ฐ์ดํฐ ๊ฐ๊ณต ๋ฑ |
afterCompletion | View ๋ ๋๋ง ์๋ฃ ํ | ๋ฆฌ์์ค ์ ๋ฆฌ, ์์ธ ๋ก๊น |
๐ง ๋ฑ๋ก ๋ฐฉ๋ฒ
(A) Java Config ๋ฐฉ์
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor())
.addPathPatterns("/secure/**") // ์ ์ฉ ๊ฒฝ๋ก
.excludePathPatterns("/public/**"); // ์ ์ธ ๊ฒฝ๋ก
}
}
(B) ๊ตฌํ ์์
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// ์ธ์ฆ ๋ก์ง
if (!isAuthenticated(request)) {
response.sendRedirect("/login");
return false;
}
return true;
}
}
๐ Servlet Filter vs HandlerInterceptor
- Filter ์ Interceptor ๋ ํ๋ ๋์์ ์ ์ฌํ์ง๋ง, ์คํ ์์ ์ด ๋ค๋ฅด๋ค.
๊ตฌ๋ถ | Filter | HandlerInterceptor |
---|---|---|
์คํ ์์ | DispatcherServlet ์ /ํ | DispatcherServlet ์ดํ, Controller ์ /ํ |
๋ฒ์ | Spring ์ธ ์๋ธ๋ฆฟ ์ ์ญ | Spring MVC ๋ด๋ถ |
Spring ๊ธฐ๋ฅ ์ ๊ทผ | ๋ถ๊ฐ๋ฅ (HandlerExceptionResolver ๋ฑ) | ๊ฐ๋ฅ |
์ฌ์ฉ ๋ชฉ์ | ์ธ์ฝ๋ฉ, XSS ํํฐ๋ง, ๋ก์ฐ HTTP ์ฒ๋ฆฌ | ์ธ์ฆยท์ธ๊ฐ, ๋ก๊น , MVC ๊ธฐ๋ฐ ์ฒ๋ฆฌ |
์ค์: Filter๋ Spring MVC ์ด์ ์ ์คํ๋๋ฏ๋ก, Spring ๋นยทMVC ๊ธฐ๋ฅ์ ์ ๊ทผ ๋ถ๊ฐ
โ ๏ธ ์ฃผ์ํ ์
- Interceptor๋ Spring MVC HandlerMapping ์ดํ ๋์ํ๋ฏ๋ก, ์ ์ ๋ฆฌ์์ค ์์ฒญ์๋ ์ ์ฉ๋ ์ ์์ (์ ์ธ ํจํด ์ค์ ํ์)
preHandle
์์false
๋ฅผ ๋ฐํํ๋ฉด ๋๋จธ์ง ์ฒด์ธ์ด ์ค๋จ๋จ- ์ธ์ฆยท๋ณด์ ๋ก์ง์ Interceptor, HTTP ์์ฒญ ์ ์ฒ๋ฆฌ๋ Filter๋ฅผ ๊ณ ๋ ค