type="nal"

[Spring MVC]세션으로 로그인/로그아웃-게시판 구현 본문

Web Development/Spring

[Spring MVC]세션으로 로그인/로그아웃-게시판 구현

nalmi 2024. 11. 29. 21:23

이전에 스터디 게시판을 만들면서 스프링프레임워크 + jsp를 이용하면서 getSession을 이용해 로그인 하는 방법을 정리해보았다.

 

1. 기존 로그인 방법(아이디와 비밀번호 모두 확인)

이전 방법 : 회원의 고유값인 아이디로 회원정보를 검색해 정보를 모두 가져오려고 했었음

=> 이렇게 하면 해당하는 정보가 없을 수도 있기 때문에 member가 널값인지 검사해준다.

개선된 방법 : 아이디로 조회된 정보가 있고, 비밀번호가 일치하는 경우에 로그인을 진행한다.

 

2. 로그아웃 처리

로그아웃 시에는 기존 세션을 무효화하거나 제거해야 한다.

getSession(false)를 사용하면 세션이 존재하지 않을때 null을 반환하기 때문에 이를 조건으로 사용할 수 있다.

// 로그아웃 로직
HttpSession session = request.getSession(false);
if (session != null) {
    session.invalidate();
}

 

getSession(true)와의 차이점은 아래와 같다.

메셔드 세션 반환 세션 없을 경우 사용 사례
getSession() 기존 세션 반환 새 세션 생성 기본 세션 처리 (로그인 등 일반적 사용)
getSession(true) 기존 세션 반환 새 세션 생성 명시적으로 세션이 반드시 필요한 경우
getSession(false) 기존 세션 반환 null 반환 세션이 있을 때만 처리하고 없으면 무시

 

로그인한 상태일 때만 세션이 필요하고, 로그아웃시 세션을 아예 삭제해줬다.

 

3. 서비스에서 로그인 검사(캡슐화)

그런데 컨트롤러까지 비밀번호를 가져와서 검사하는 방식은 권장되지 않기 때문에 서비스 계층에서 회원정보를 검사하도록 기존 방식을 한단계 더 개선했다.

회원정보 조회 서비스 메서드

컨트롤러

 

4. 로그인시 알림메시지 뜨게 하는 법

메세지 정보를 로그인한 member객체와 함께 세션에 임시 저장한다. ""따옴표 안에있는게 공유할 이름

<!-- 로그인 알림메시지 -->
<script>
<c:if test="${not empty sessionScope.login_msg}">
    alert('${sessionScope.login_msg}');
    <c:set var="login_msg" scope="session" value="${null}" />
</c:if>
</script>

메인화면과 로그인화면에서 sessionScope를 이용해 검사.

request에 저장하면 리다이렉트면 어차피 사라지기 때문에 세션으로 저장,

그리고 일회성으로 메세지를 출력한 후 세션에서 제거한다.

c:set으로 메시지를 제거하는 로직은 아래와 같다. scope를 사용할땐 var속성을 필수로 사용해야 한다.

  • var="login_msg": 세션에서 login_msg 속성을 지정
  • scope="session": 세션 범위에서 속성을 수정
  • value="${null}": 세션에서 login_msg 속성을 null로 설정하여 메시지를 제거