본문 바로가기
Backend/JAVA

[JAVA] 자바 세션 값 가져오기 - RequestContextHolder session 사용

by couque 2023. 4. 6.
반응형

자바에서 값을 임시로 저장하기 위해 쿠키와 세션을 사용할 수 있다.  쿠키는 client에서 사용하고, session은 서버에서 사용하기 때문에 session이 보안적인 측면에서 좋다고 할 수 있다.  

 

HttpServletRequest를 사용하여 session을 사용할때 service에서 세션을 사용하려면 파라미터로 request를 넘겨줘야 하는데

스프링 프로젝트 모든곳에서(service, dto 등) 세션을 사용하려면 RequestContextHolder를 사용하면 파라미터로 request를 넘겨주지 않아도 service에서 세션을 사용할 수 있다.


# RequestContextHolder를 사용하여 세션 set, get, remove하는 함수 구현

import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;

public class SessionScopeUtil {
	
    public static Object getAttribute(String key){
    	return RequestContextHolder.getRequestAttributes().getAttribute(key, RequestAttributes.SCOPE_SESSION);
    }
    
    public static void setAttribute(String key, Object value){
    	RequestContextHolder.getRequestAttributes().setAttribute(key, value, RequestAttributes.SCOPE_SESSION);
    }
    
    public static void removeAttribute(String key){
    	RequestContextHolder.getRequestAttributes().removeAttribute(key, RequestAttributes.SCOPE_SESSION);
    }

}

# 세션키를 설정하여 바로 세션 정보를 가져오기

public static final String SESSION_SAMPLE_KEY = "SESSION_SAMPLE";

public static SampleDto getSampleInfo() {
    return (SampleDto)SessionScopeUtil.getAttribute(SESSION_SAMPLE_KEY);
}

public static void setSampleInfo(SampleDto obj) {
    SessionScopeUtil.setAttribute(SESSION_SAMPLE_KEY, obj);
}

public static void removeSampleInfo() {
    SessionScopeUtil.removeAttribute(SESSION_SAMPLE_KEY);
}

# 세션키를 전달하여 세션 정보를 가져오기

public static Object getSessionData(String key){
    return SessionScopeUtil.getAttribute(key);
}

public static void setSessionData(String key, Object obj){
    SessionScopeUtil.getAttribute(key, obj);
}

public static void removeSessionData(String key){
    SessionScopeUtil.removeAttribute(key);
}

 

 

반응형

댓글