Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[로그인] 로그인 처리 - 세션 적용 본문

인프런/[인프런] 스프링 MVC 2

[로그인] 로그인 처리 - 세션 적용

Seung__ 2021. 9. 26. 12:56

기존에 사용된 쿠키 방식을 session으로 변경해보자.

 

1. LoginController


  • loginV2()
    @PostMapping("/login")
    public String loginV2(@Validated @ModelAttribute("loginForm") LoginForm form,
                        BindingResult bindingResult, HttpServletResponse response){
        if(bindingResult.hasErrors()){
            return "login/loginForm";
        }

        Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
        if(loginMember == null){
            bindingResult.reject("loginFail", "id 또는 pw가 맞지 않습니다.");
            return "login/loginForm";
        }

        //로그인 성공 처리

        //세션 관리자를 통해 세션을 생성, 회원 데이터 보관
       sessionManager.createSession(loginMember, response);

        return "redirect:/";
    }
  • logoutV2()
    • 로그아웃시, 세션을 만료하고 홈으로 이동.
    @PostMapping("/logout")
    public String logoutV2(HttpServletRequest request){
        sessionManager.expire(request);
        return "redirect:/";
    }

 

 

 

2. HomeController


  • homeLoginV2()
    • 세션에 회원 정보가 없는 경우 일반 home으로 이동
    • 세션에 회원 정보가 있는 경우 loginHome으로 이동.
    • 즉 만약 회원 정보가 없으면, 쿠키나 세션이 없는 것 이므로 로그인 되지 않은 것으로 처리
    @GetMapping("/")
    public String homeLoginV2(HttpServletRequest request, Model model){

        //세션 관리자에 저장된, 회원 정보 조회
        Member member = (Member) sessionManager.getSession(request);

        //세션에회원 정보가 없는 경우. -> 일반 home
        if(member == null){
            return "home";
        }

        //세션에 회원 정보가 있는 경우.-> login home
        model.addAttribute("member", member);
        return "loginHome";

    }

 

 

 

3. 실행


  • 로그인 성공시 Response Hedaers에 cookie가 생성된것을 확인이 가능.
  • mySessionId에 값이 추가되었다. 기존에 사용된 id가 아니다.

  • home으로 다시 이동하면 RequestHeaders에 mySessionId가 있는걸 볼 수 있음.

  • 쿠키 값을 임의로 변경하면???
    • 로그인 안한 홈 화면으로 보내버림.
    •  

 

 

4. 정리


  • 세션은 특별한 것이 아니라 단지 쿠키를 사용하는데,  서버에서 데이터를 유지하는 방법임.
  • 매 번 세션 개을 개발하기는 귀찮음.
  • 그래서 서블릿도 세션 개념을 지원한다.

 

5. GitHub : 210925 login & Session


 

GitHub - bsh6463/login

Contribute to bsh6463/login development by creating an account on GitHub.

github.com

 

Comments