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
관리 메뉴

개발자되기 프로젝트

[로그인] 로그인 처리 - Servlet HttpSession 2 본문

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

[로그인] 로그인 처리 - Servlet HttpSession 2

Seung__ 2021. 9. 26. 14:11

1. @SessionAttribute


  • Spring은  세션을 더 편리하게 사용할 수 있도록 @SessionAttribute 을 지원
  • 이미 로그인 된 사용자를 찾을 때는 다음과 같이 하면 됨.
  •  참고로 이 기능은 세션을 생성하지 않는다. -> create : false(required = false)
    @SessionAttribute(name = "loginMember", required = false) Member loginMember​
  • @SessionAttribute 기능
    • request에서 session을 꺼내고 session에서 name으로 쿠키 조회
      • 해당 쿠키가 없으면 null 반환? 
    • 쿠키에서 JSESSIONID 조회
    • 해당 JESSIONID로 member조회
    • 세션을 찾고, 세션에 들어있는 데이터를 찾는 번거로운 과정을 스프링이 한번에 편리하게 처리
      확인할 수 있다.
    • false로 지정했기 때문에 session이 없어도 새로 생성하지 않음.

 

 

 

2. 변경 전


    //@GetMapping("/")
    public String homeLoginV3(HttpServletRequest request, Model model){

        HttpSession session = request.getSession(false);

        if(session == null){
            return "home";
        }

        Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);


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

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

    }

 

 

 

3. 변경 후


 

    @GetMapping("/")
    public String homeLoginV3Spring(
            @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model){
        
        //세션에회원 정보가 없는 경우. -> 일반 home
        if(loginMember == null){
            return "home";
        }

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

    }

 

 

 

4. TrackingModes


  • 로그인을 처음 시도하면 url에 JSESSIONID가 포함되어 있다.

  • 이 기능은 웹 브라우저가 쿠키를 지원하지 않을 때 
  • 쿠키 대신 URL을 사용하여 세션을 유지하는 방법 -> 잘 안씀 현실성 없음.
  • 이 방법을 사용하기 위해서는 URL에 항상 이 값을 포함해서 전달해야 함.
  • 테플릿 엔진은 엔진을 통해서 링크를 걸며 jesessionid를 url에 자동으로 포함해줌.
  • 서버 입장에서는 웹 브라우저가 쿠키를 지원하는지 안하는지 처음에는 판단하기 어려움
  • 그래서 쿠키도 전달하고 URL에 jsessionid로 같이 전달함.
  • 만약 URL 전달 방식을 크고 싶으면 application.properties에 옵션ㅇ르 추가하면됨.
server.servlet.session.tracking-modes=cookie

 

 

 

4. GitHub : 210926 @SessionAttribute


 

GitHub - bsh6463/login

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

github.com

 

Comments