

์ธํฐ์
ํฐ ํด๋์ค๋ 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ํธ ์ ์๊ฐํ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.