작심십이일러의 스프링 시작하기(12)-1

서은경·2022년 9월 4일
0

Spring

목록 보기
21/43

로그인, 비밀번호 변경의 실습 위주라 필요한 내용만 정리해서 적을 거라 오늘 포스팅은 짧다..!

컨트롤러에서 HttpSession 사용하기

로그인 상태를 유지하는 방법은 크게 HttpSession을 이용하는 방법과 쿠키를 이용하는 방법이 있다. 컨트롤러에서 HttpSession을 사용하려면 다음의 두가지 방법 중 한가지를 사용하면 된다.

  • 요청 매핑 어노테이션 적용 메서드에 HttpSession 파라미터를 추가한다.
@PostMapping
public String form(LoginCommand loginCommand, Errors error, HttpSession session) {
    // HttpSession 파라미터가 존재할 경우 스프링 MVC는 컨트롤러의 메서드를 호출할 때
    // HttpSession 객체를 파라미터로 전달한다.
    // HttpSession을 생성하기 전이면 새로운 HttpSession을 생성하고
    // 그렇지 않으면 기존에 존재하는 HttpSession을 전달한다.
    // 항상 HttpSession을 생성한다
}
  • 요청 매핑 어노테이션 적용 메서드에 HttpServletRequest 파라미터를 추가하고 HttpServletRequest를 이용해서 HttpSession을 구한다.
@PostMapping
public String submit(LoginCommand loginCommand, Errors error, HttpServletRequest req) {
	HttpSession session = req.getSession();
    // 필요한 시점에만 HttpSession을 생성할 수 있다
}

로그인에 성공하면 HttpSession의 authInfo 속성에 인증 정보 객체를 저장하고

	@PostMapping
    public String submit(LoginCommand loginCommand, Errors errors, HttpSession session) {
        new LoginCommandValidator().validate(loginCommand, errors);
        if (errors.hasErrors()) {
            return "login/loginForm";
        }
        try {
            AuthInfo authInfo = authService.authenticate(loginCommand.getEmail(), loginCommand.getPassword());

            // HttpSession의 authInfo 속성에 인증정보 객체를 저장
            session.setAttribute("authInfo", authInfo);
            return "login/loginSuccess";
        } catch (WrongIdPasswordException e) {
            errors.reject("idPasswordNotMatching");
            return "login/loginForm";
        }
    }

로그아웃 하면 HttpSession을 제거한다.

	@RequestMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "redirect:/main";
    }

0개의 댓글