์ธํฐ์
ํฐ ํด๋์ค๋ HandlerInterceptor
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
HandlerInterceptor
์๋ 3๊ฐ์ง ๋ฉ์๋๊ฐ ์์ต๋๋ค.
preHandle
๋ฉ์๋๋ ์ปจํธ๋กค๋ฌ ํธ์ถ ์ ์ ํธ์ถ๋๋ ๋ฉ์๋์
๋๋ค.request, response
๊ฐ์ฒด๋ฅผ ๊ฐ๊ณ ์๊ณ handler
์ฆ ์ปจํธ๋กค๋ฌ์ ๋ํ ๊ฐ์ฒด๋ ๊ฐ๊ณ ์์ต๋๋ค. Dispatcher servlet
์ดํ์ ํธ์ถ๋๊ธฐ์ ๊ฐ๋ฅํ ๊ฒ์ด์ง์.postHandle
๋ฉ์๋๋ ์ปจํธ๋กค๋ฌ ํธ์ถ ํ์ ์์ธ๊ฐ ์์ ๋ ํธ์ถ๋๋ ๋ฉ์๋์
๋๋ค. ์ปจํธ๋กค๋ฌ ํธ์ถ ์งํ์ ํธ์ถ๋์ง๋ง ๋ง์ฝ ์์ธ๊ฐ ๋ฐ์ํ์๋ค๋ฉด postHandle
๋ฉ์๋๋ ์คํ๋์ง ์์ต๋๋ค. ModelAndView
๊ฐ์ฒด๋ ๊ฐ๊ณ ์๋ ๊ฒ์ด ํน์ด์ ์
๋๋ค.afterComplete
๋ฉ์๋๋ ์ปจํธ๋กค๋ฌ์ Http ์์ฒญ์ด ๋ชจ๋ ์๋ฃ๋ ํ์ ํธ์ถ๋ฉ๋๋ค. ์ด ๋ฉ์๋๋ ์์ธ๊ฐ ๋ฐ์ํ์ฌ๋ ๋ฐ๋์ ํธ์ถ๋ฉ๋๋ค.Exception
๊ฐ์ฒด๋ ๊ฐ๊ณ ์์ต๋๋ค.์ฐ๋ฆฌ๊ฐ ํ์ํ ๋ฉ์๋๋ preHandle
๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ preHandle
๋ฉ์๋๋ง ๊ตฌํํ๊ฒ ์ต๋๋ค. HandlerInterceptor
์ ๋ชจ๋ ๋ฉ์๋๋ default
ํค์๋๊ฐ ๋ถ์ด์๊ธฐ ๋๋ฌธ์ ํ์ ๊ตฌํ ๋ฉ์๋๊ฐ ์๋๋๋ค.
preHandle
์ ๊ตฌํ์ ์ด์ Filter
์ doFilter
๋ฉ์๋์ ๊ฑฐ์ ๋น์ทํฉ๋๋ค.
๋ค๋ฅธ ์ ์ ์ ๊ทผ ๊ฐ๋ฅํ URI์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ธํฐ์
ํฐ ๊ตฌํ๋ถ์์ ํ์ง ์๋๋ค๋ ์ ์
๋๋ค.
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("์ธ์ฆ ์์ฒญ {}", requestURI);
HttpSession session = request.getSession();
if (session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) {
log.info("์ธ์ฆ ์คํจ");
response.sendRedirect("/login?redirectURL=" + requestURI);
return false; // ๋ ์ด์ ์งํ โ
}
return true;
}
}
HttpServletRequest
๊ฐ์ฒด๋ก๋ถํฐ session
์ ๋ณด๋ฅผ ๋ฐ์์ ๊ถํ์ ๊ฒ์ฆํฉ๋๋ค.
redirect
ํ false
๋ฅผ ๋ฆฌํดํฉ๋๋ค.true
๋ฅผ ๋ฆฌํดํฉ๋๋ค.true
๋ฆฌํด์ ๋ค์ ์ธํฐ์
ํฐ ํน์ ์ปจํธ๋กค๋ฌ๋ก ์งํํฉ๋๋ค.
false
๋ฆฌํด์ ํ์ฌ ์ธํฐ์
ํฐ์์ ์งํ์ ๋ฉ์ถฅ๋๋ค. (์ฐ๋ฆฌ๋ false
๋ฆฌํด ์ redirect
ํด์ฃผ์๊ธฐ ๋๋ฌธ์ ๋ฉ์ถ์ง ์๊ณ redirect
์ดํ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋๋ค.)
WebMvcConfigurer
๋ฅผ ๊ตฌํํ๋ ์ค์ ํด๋์ค๋ฅผ ์ ์ํฉ๋๋ค.
(์ปดํฌ๋ํธ ์ค์บ์ ๋์์ด ๋๊ธฐ ์ํด @Configuration์ ๋ถ์ฌ์ค๋๋ค.)
addInterceptors(InterceptorRegistry)
๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํฉ๋๋ค.
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginCheckInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/", "/members/add", "/login", "/logout", "/css/**");
}
order
๋ ์ธํฐ์
ํฐ์ ์์๋ฅผ ์ ์ํฉ๋๋ค. ๋ง์ฝ ๊ถํ ๊ฒ์ฆ์ ์ํ ์ธํฐ์
ํฐ๋ณด๋ค ์์ ๋์์ํค๊ณ ์ถ์ ์ธํฐ์
ํฐ๊ฐ ์๋ค๋ฉด ๊ทธ ์ธํฐ์
ํฐ์ order
๋ฅผ 1๋กํ๊ณ ๋ก๊ทธ์ธ ๊ฒ์ฆ ์ธํฐ์
ํฐ์ order
๋ฅผ 2๋ก ํด์ค๋๋ค.addPathPatterns
๋ฑ๋กํ๊ณ ์ ํ๋ ์ธํฐ์
ํฐ๋ฅผ ์ ์ฉ์ํฌ ๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค./**
์
๋๋ค. /*
๊ฐ ์๋ ๊ฒ์ ์ ์ํฉ๋๋ค.excludePathPatterns
์๋ ์ธํฐ์
ํฐ๋ฅผ ์ ์ฉ์ํค์ง ์๊ณ ์ ํ๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค.์์ ๊ฐ์ด ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ค๋ค๋ฉด ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ๋ฑ๋กํ ์ธํฐ์
ํฐ๋ฅผ ์ ์ฉ์ํค๊ณ / , /members/add, /login, /logout, /css/**
์ ๋ํด ์ธํฐ์
ํฐ๋ฅผ ์ ์ฉ์ํค์ง ์์ต๋๋ค.
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง MVC 2ํธ ์ ์๊ฐํ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.