본문 바로가기

카테고리 없음

Spring 13. Intercepter

▶ 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;
		}
	}
}