본문 바로가기
카테고리 없음

[java/spring] 로그인 / 로그아웃 / 권한 검사

by joa-yo 2020. 4. 9.
반응형

spring으로 로그인 및 로그아웃 처리를 할 때는 spring Security를 사용할 수 있다. 로그인, 로그아웃, 권한 검사 등을 해주어 권한마다 접근할 수 있는 페이지를 지정해줄 수 있다. 이것을 사용하기 위해선 spring security를 이해하는 것이 필요한데, 사용하기 위해서 공부해보았지만 어려워서 포기했다. 대신, 비슷하게나마 구현해보았다.

 

먼저 로그인과 로그아웃에 관련된 것을 정리해두겠다. 권한 검사는 이외의 것들을 다 한 후에 적용할 예정이라서, 추후에 추가로 작성하겠다.

 

 

 


 

 

로그인, 로그아웃 그리고 로그인시 세션에 저장해둔 정보들을 가져오는 메소드들이다. 모두 static한 메소드로 구성되어 있다. 

 

파라미터로는 HttpServletRequest를 보내주는데, 로그아웃 할 때 session객체를 초기화 하게 되는데 이 때 request가 필요해서 모든 파라미터를 통일성 있게 맞춰주었다.

 

 

더보기

작성한 코드가 궁금하다면, 이 글을 펼치세요.

package kr.coo.happysue.web.util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import kr.coo.happysue.member.MemberDTO;

public class MemberInfoSession {
	
	public static final String MEMBER_ID = "member_memberId";
	public static final String NAME = "member_name";
	public static final String AUTH = "member_auth";
	public static final String AUTH_NAME = "member_auth_name";
	
	public static void login(HttpServletRequest request, MemberDTO member) {
		HttpSession session = request.getSession();
		
		//표출되는 권한 명칭 설정
		String authName = "게시판 관리자";
		if ( member.getAuth().equals("ADMINISTRATOR") ) {
			authName = "전체관리자";
		}
		
		//회원정보 셋팅
		session.setMaxInactiveInterval(1800); // 1800 = 60s*30 (30분) 
		session.setAttribute(MEMBER_ID, member.getMemberId());
		session.setAttribute(NAME, member.getName());
		session.setAttribute(AUTH, member.getAuth());
		session.setAttribute(AUTH_NAME, authName);
	}
	
	public static void logout(HttpServletRequest request) {
		request.getSession().invalidate();
		request.getSession(true);
	}
	
	public static boolean isLogin(HttpServletRequest request) {
		HttpSession session = request.getSession();
		if (null == session.getAttribute(MEMBER_ID)) {
			return false;
		}
		return true;
	}
	
	public static String getId(HttpServletRequest request) {
		String value = (String) request.getSession().getAttribute(MEMBER_ID);
		if (value == null) {
			return "";
		}
		return value;
	}
	
	public static String getName(HttpServletRequest request) {
		String value =  (String) request.getSession().getAttribute(NAME);
		if (value == null) {
			return "";
		}
		return value;
	}
	
	public static String getAuth(HttpServletRequest request) {
		String value =  (String) request.getSession().getAttribute(AUTH);
		if (value == null) {
			return "";
		}
		return value;
	}
	
	public static String getAuthName(HttpServletRequest request) {
		String value =  (String) request.getSession().getAttribute(AUTH_NAME);
		if (value == null) {
			return "";
		}
		return value;
	}
}

권한

- 전체 관리자 > 게시판 관리자

- 세션에 저장되는 회원정보 : 아이디, 이름, 권한, 권한 명칭

 

 

 


 

 

 

로그인

    public static void login(HttpServletRequest request, MemberDTO member) {
		//1) 세션 가져오기
		HttpSession session = request.getSession();
		
		//2) 표출되는 권한 명칭 설정
		String authName = "게시판 관리자";
		if ( member.getAuth().equals("ADMINISTRATOR") ) {
			authName = "전체관리자";
		}
		
		//3) 세션 유지시간 설정
		session.setMaxInactiveInterval(1800); // 1800 = 60s*30 (30분) 
        
		//4) 회원정보 설정
		session.setAttribute(MEMBER_ID, member.getMemberId());
		session.setAttribute(NAME, member.getName());
		session.setAttribute(AUTH, member.getAuth());
		session.setAttribute(AUTH_NAME, authName);
	}

로그인은 웹 페이지 사용 시 지속적으로 필요한 정보들을 저장한다. 아이디, 이름, 권한, 권한 명칭 정도만 저장했다.

 

1) request에서 세션을 가져온다.

2) 권한 명칭은 따로 DB에 저장하지 않아서 로그인 시 설정해주었다.

3) 세션 유지시간은 30분으로 설정했다. 30분 동안 사용자의 요청이 없으면 세션은 만료되어 자동 로그아웃처리가 된다.

4) 특정한 이름으로 세션에 저장한다. 세션에 저장할 변수명은 상수로 설정했다. 변수명을 수정하고 싶을 때 편리하게 수정할 수 있을 것 같다는 생각이 들어서다.

 

 

 

 

로그아웃

	public static void logout(HttpServletRequest request) {
		request.getSession().invalidate();
		request.getSession(true);
	}

로그아웃은 매우 간단하다. 코드 두줄이면 끝난다. invalidate()로 현재 사용하고 있는 세션을 무효화한다. 그리고 getSession(true)를 통해서 새로운 세션ID를 발급해준다. 이렇게 처리하여 세션을 초기화 할 수 있다.

 

인터넷을 찾아보면 invalidate()만 많이 나와있던데, 이 방식으로 하면 이번 요청에서는 session을 무효화 처리 할 수 있지만, 사용자가 요청을 또 보내면 모든 정보가 그대로 남아있다. 그렇기 때문에 저 두 줄의 코드는 모두 작성해 주어야 한다.

 

세션에 저장되는 회원정보는 모두 getter를 통해서 가져올 수 있다. 이것은 간단하므로 설명을 생략하겠다.

 

 

 

 

 


참조

 

 

 

로그아웃

https://stackoverrun.com/ko/q/4330369

불러오는 중입니다...

 

반응형

댓글