Kim VamPa

[Spring][쇼핑몰 프로젝트][10] 로그아웃 기능 구현(메인페이지) 본문

스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][10] 로그아웃 기능 구현(메인페이지)

Kim VamPa 2021. 1. 28. 08:53
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

목표

메인 페이지 로그아웃 버튼 및 로그아웃 메서드 구현

 

그림 1

 

 메인페이지에 로그인 성공 시 등장하는 div태그에 로그아웃 버튼을 제작하고, 해당 메서드를 제작하겠습니다. 진행 순서는 view에 버튼 태그 및 서버 측 로그아웃 메서드를 요청하는 js를 작성한 뒤, 서버 측 로그아웃 기능을 실행하는 메서드를 작성하겠습니다.

 

 

순서

1. 로그아웃 버튼 작성(main.jsp)

2. 로그아웃 메서드 작성(MemberController.java)

3. 테스트

 

 

1. 로그아웃 버튼 작성(main.jsp)

 로그인 성공시 등장하는 class 속성이 "login_success_area"인 div태그 안에 아래의 a태그를 추가합니다. url 경로는 "/member/logout.do"로 하였습니다.(자신이 원하는 url을 작성하시면 됩니다.) 아직  서버에 해당 url메서드를 작성하지 않았기 때문에 동작은 하지 않을 것입니다.

 

1
2
3
 
<a href="/member/logout.do">로그아웃</a>
 

 

그림 2

 

 버튼의 css를 아래와 같이 추가해주었습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
.login_success_area>a{
    font-size: 15px;
    font-weight: 900;
    display: inline-block;
    margin-top: 5px;
    background: #e1e5e8;
    width: 82px;
    height: 22px;
    line-height: 22px;
    border-radius: 25px;
    color: #606267;    
}
 

 

그림 3

 

2. 로그아웃 메서드 작성(MemberController.java)

 앞선 포스팅에서 로그인 기능을 구현하기 위해서 서버에 사용자의 아이디와 비밀번호가 있는지 확인한 후, 로그인한 사용자의 정보를 세션에 저장 하였습니다. 즉, 로그인이 되었다는 것은 세션에 사용자의 정보를 저장하였다는 의미입니다.

 반대로 로그아웃은 세션에 저장되어 있는 사용자의 정보를 지우는 작업을 의미합니다. 따라서 우리가 작성할 메서드에 세션을 제거하는 작업을 한 뒤 메인페이지로 이동하도록 로직을 작성할 것입니다.

 

 

 MemberController.java에 아래와 같이 메서드 를 작성합니다.

  • 메서드 방식은 GET방식 입니다. a태그의 요청은 GET방식이기 때문입니다.
  • url은 logout.do 입니다. 앞서 a태그 속성에서 작성한 url경로입니다. 
  • session에 대한 작업을 해야하기 때문에 HttpServletRequest 타입의 매개변수를 작성하였습니다.

 

1
2
3
4
5
6
7
 
    /* 메인페이지 로그아웃 */
    @RequestMapping(value="logout.do", method=RequestMethod.GET)
    public String logoutMainGET(HttpServletRequest request) throws Exception{
        
    }
 

 

그림 4

 

 

 세션을 제거하는 작업을 해야 하기 때문에 HttpSession타입의 session 변수 및 초기화를 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
 
    /* 메인페이지 로그아웃 */
    @RequestMapping(value="logout.do", method=RequestMethod.GET)
    public String logoutMainGET(HttpServletRequest request) throws Exception{
        
        logger.info("logoutMainGET메서드 진입");
        
        HttpSession session = request.getSession();
        
        
    }
 

 

그림 5

 

 

 우리는 사용자의 정보를 "member"라고 네이밍 한 sessino을 삭제해야 합니다. HttpSession api 문서를 보면 우리 목적에 맞는 session을 제거할 수 있는 메서드가 2개("invalidate()", "removeAttribute()") 있습니다. "invalidate()" 메서드의 경우 세션 전체를 무효화하는 메서드입니다. "removeAttribute()"의 경우 특정 이름으로 네이밍 한 session 객체를 타기팅하여 삭제하는 메서드입니다.

 로그아웃을 할 경우 사용될 세션이 없기 때문에 저는 "invalidate()" 메서드를 사용하였습니다. 아래와 같이 session을 제거하는 코드와 메서드 실행 후 main페이지로 이동할 수 있도록 return문을 작성하였습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
    /* 메인페이지 로그아웃 */
    @RequestMapping(value="logout.do", method=RequestMethod.GET)
    public String logoutMainGET(HttpServletRequest request) throws Exception{
        
        logger.info("logoutMainGET메서드 진입");
        
        HttpSession session = request.getSession();
        
        session.invalidate();
        
        return "redirect:/main";        
        
    }
 

 

그림 6

 

 

3. 테스트

  로그인 후 메인 페이지에 접속하여 로그아웃 버튼을 테스트합니다.

 

그림 7

 

그림 8

 

 

REFERENCE

 

 

DATE

  • 2020.12.28
728x90
반응형
Comments