본문 바로가기

카테고리 없음

Spring 02. 로그인, 로그아웃(Model, ModelAndView)

 

 

   // 로그인 요청 처리 완료 후, "응답데이터"를 담고 응답페이지로 url재요청할 예정
    1) Model객체를 이용하는 방법
        포워딩할 응답뷰페이지로 전달하고자 하는 데이터를 맵형식으로 담아주기
        -> request, session 스코프 두개를 가지고 있다.

        - 기본 scope : request
        - session scope : 클래스 위쪽에 @SessionAttribute를 추가한 후 작성하면 된다.

    2) ModelAndView객체를 이용하는 방법
        ModelAndView에서 Model은 데이터를 담을 수 있는 맵형태의 객체(위 Model과 동일)
        View는 이동하고자 하는 페이지에 대한 정보를 담고있는 객체. 두개를 합쳐서 ModelAndView라고 한다.

        Model은 내부에 데이터를 추가하고자 할 때 addAttribute()를 사용
        ModelAndView는 데이터를 추가할 때 addObject()를 사용
        view를 지정할 때 setViewName()을 사용

 


 

// 로그인
<a data-toggle="modal" data-target="#loginModal">로그인</a>
// 로그인 클릭시 모달창 띄워줌


@SessionAttributes({"loginUser"}) 
// Model안에 추가된 값이 key값과 일치하는 값이 있으면 해당 값을 session으로 이관
@Controller // Bean 객체로 등록!
//(Spring의 빈스캐너가 자동으로 빈객체로 만들어준다(servlet-context.xml안에 있는 태그))
public class MemberController {

        private MemberService mService;
        
        @RequestMapping(value="login.me", method=RequestMethod.POST)
        public String loginMember(Member m, HttpSession session,
                Model model, ModelAndView mv) {
					
//		Model객체 사용시
//		model.addAttribute("errorMsg", "오류발생!");
		
//		ModelAndView객체 사용시
		mv.addObject("errorMsg", "오류발생");
		mv.setViewName("common/errorPage");
        
                Member loginUser = mService.loginMember(m);
                return mv;
	}	
}

 

 

// 로그아웃
<a href="${contextPath}/logout.me">로그아웃</a>


@SessionAttributes({"loginUser"}) 
@Controller
public class MemberController {

	@GetMapping("/logout.me")
	public String logoutMember(HttpSession session, SessionStatus status) {
		
		session.invalidate(); // session 비우기
		status.setComplete(); 
	// @SessionAttributes와 model로 session scope에 이관된 데이터는 SessionStatus로 비워줘야 한다.
		return "redirect:/"; //페이지 재요청
	}
}