Spring postHandle(user)

채상혁·2022년 2월 16일
0

Spring

목록 보기
12/18
post-custom-banner

Interceptor는 HandlerInterceptor를 구현하여 사용한다.

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,인지 아닌지로 로그인 여부를 판단한다.
로그인 성공했다면 세션 데이터를 만들어주고 없다면 로직에 맞게 수행할 수 있도록 한다.

post-custom-banner

0개의 댓글