스프링으로 쇼핑몰을 만들어보자14 - 로그아웃 기능 구현
기능구현
- 회원가입(주소API연동, 이메일 인증, ajax를 사용하여 아이디 중복검사)
- 관리자 페이지(인터셉터 적용, 상품관리, 회원관리)
- 업로드(이미지 등록, 수정, 삭제)
- 검색
- 페이징
- 구매(장바구니, 포인트사용)
- 댓글(등록,수정,삭제)
- 중간에 막혔거나 에러 해결 못하겠으면 yoonbitnara@gmail.com 으로 문의
순서
- 로그아웃 버튼 작성(main.jsp)
- 로그아웃 메서드 작성(MemberController.java)
- 테스트
로그아웃 버튼 작성(main.jsp)
- 로그인 성공시 등장하는 class 속성이
login_success_area
인 div태그 안에 아래의 a태그를 추가한다. url경로는/member/logout.do
로 했다. 아직 서버에 해당 url 메서드를 작성하지 않았기 때문에 동작은 하지 않는다.
<!-- 로그인 상태 -->
<c:if test="${member != null }">
<div class="login_success_area">
<span>회원 : ${member.memberName }</span>
<span>충전금액 : <fmt:formatNumber value="${member.money }" pattern="\#,###.##"/></span>
<span>포인트 : <fmt:formatNumber value="${member.point }" pattern="#,###"/></span>
<a href="/member/logout.do">로그아웃</a>
</div>
</c:if>
- 해당 버튼의 css를 아래와 같이 추가하였다.
.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;
}
로그아웃 메서드 작성(MemberController.java)
- 앞에서 로그인 기능을 구현하기 위해 서버에 사용자의 아이디와 비밀번호가 있는지 확인한 후 로그인한 사용자의 정보를 세션에 저장했다.
- 즉, 로그인이 되었다는 것은 세션에 사용자의 정보를 저장하였다는 의미다.
- 반대로 로그아웃은 세션에 저장되어 있는 사용자의 정보를 지우는 작업을 의미한다. 우리가 작성할 메서드에 세션을 제거하는 작업을 한 뒤 메인페이지로 이동하도록 로직을 작성할 것이다.
MemberController.java
- 메서드 방식은 GET방식이다. a태그의 요청은 GET방식이기 때문
- url은 logout.do이다. a태그 속성에서 작성한 url경로이다.
- session에 대한 작업을 해야하기 때문에
HttpServletRequest
타입의 매개변수를 작성하였다.
- MemberController.java
/* 메인페이지 로그아웃 */
@RequestMapping(value="logout.do", method = RequestMethod.GET)
public String logoutMainGET(HttpServletRequest request) throws Exception {
}
- 세션을 제거하는 작업을 해야 하기 때문헤 HttpSession타입의 session 변수 및 초기화를 한다.
/* 메인페이지 로그아웃 */
@RequestMapping(value="logout.do", method = RequestMethod.GET)
public String logoutMainGET(HttpServletRequest request) throws Exception {
logger.info("logoutMainGET 메서드 진입");
HttpSession session = request.getSession();
}
- 우리는 사용자의 정보를 member라고 네이밍한 session을 삭제해야 한다. HttpSession api 문서를 보면 우리 목적에 맞는 session을 제거할 수 있는 메서드가 2개가 있다.
invalidate()
메서드의 경우 세션 전체를 무효화하는 메서드이다.removeAttribute()
의 경우 특정 이름으로 네이밍 한 session 객체를 타겟팅하여 삭제하는 메서드이다. - 로그아웃을 할 경우 사용될 세션이 없기 때문에 나는
invalidate()
메서드를 사용했다. 아래와 같이 session을 제거하는 코드와 메서드 실행 후 main페이지로 이동할 수 있도록 return문을 작성하였다.
/* 메인페이지 로그아웃 */
@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";
}
Leave a comment