▶ Intercepter
: DispatcherServlet <-> (Intercepter) <-> Controller
-> DispatcherServlet <-> Controller 요청 또는 응답을 보내기 전에 Intercepter가 끼어들어 작성해놓은 메서드를 먼저 실행하게 하는 것
// 로그인 여부를 체크하는 인터셉터.
// -> 로그인이 필요한 페이지 요청시 로그인을 할 수 있도록 페이지로 리다이렉트해주는 메서드
// -> 로그인 후 요청했던 URL로 리다이렉트해주기
public class LoginIntercepter implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 요청 url정보 -> /spring/board/list/T -> board/list/T
String requestUrl = request.getRequestURI().substring(request.getContextPath().length());
// 로그인한 사용자정보 조회
HttpSession session = request.getSession();
Member loginUser = (Member)session.getAttribute("loginUser");
if(loginUser != null) {
return HandlerInterceptor.super.preHandle(request, response, handler);
}else {
// 로그인하지 않은 경우
session.setAttribute("alertMsg", "로그인 후 이용할 수 있습니다.");
// 로그인 완료 후 이동할 url을 session영역안에 저장하기
// requestUrl
String queryString = request.getQueryString(); // queryString : url의 '?' 뒤에 key=value 형태로 있는 것
String nextUrl = requestUrl+"?"+queryString;
session.setAttribute("nextUrl", nextUrl);
//로그인요청 성공 후 세션영역 안에 저장된 nextUrl값을 활용해서 페이지 이동해주기
response.sendRedirect(request.getContextPath()+"/");
return false;
}
}
}