public class UserLoginSuccessHandler implements HandlerInterceptor
postHandle 메서드를 오버라이딩해서 사용한다.
//로그인 처리 이후에 실행되는 핸들러(postHandle) 오버라이딩
//1. /login 요청으로 들어올떄 실행되도록 xml 파일에 빈으로 등록 후 매핑.
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("login 인터셉터 동작 POSTHANDLE");
// modelAndView객체에 있는 모델 데이터가 map의 형식으로 반환.
ModelMap mv = modelAndView.getModelMap();
UserVO vo = (UserVO) mv.get("user");
System.out.println("인터셉터 vo값: " + vo);
if(vo != null) { //로그인 성공 컨트롤러에서 로그인을 성공했던 사람.
System.out.println("로그인 성공 로직 동작");
//로그인 성공한 회원들에게 세션 데이터를 생성해서 로그인 유지를 하게 해 줌.
HttpSession session = request.getSession();
session.setAttribute("login", vo);
response.sendRedirect(request.getContextPath());
} else { //vo == null 로그인 실패
System.out.println("로그인 실패 로직 동작");
modelAndView.addObject("msg","loginFail");
// modelAndView.setViewName("/user/userLogin"); 어차피 여기로 이동한다.
}
}
postHandle은 컨트롤러에서 요청을 받고 응답할 떄 가로채는 역할을 한다.
위 상황에서는 controller에서 user라는 이름으로 vo객체를 담아서 응답할때 interceptor에서 가로채서 vo의 값이 null,인지 아닌지로 로그인 여부를 판단한다.
로그인 성공했다면 세션 데이터를 만들어주고 없다면 로직에 맞게 수행할 수 있도록 한다.