본문 바로가기
개발/JAVA, Spring

[JAVA] Util 클래스에서 세션 사용하기

by 똘똘이박사 2021. 8. 2.

직무에 따른 권한을 설정하기 위해

새로운 권한 설정 룰을 만들어야 할 상황이 발생했다.

 

일단 방향은 세션을 이용하되

직무에 따른 권한을 체크하기 위한 Util 클래스를 하나 신규를 생성하기로 했다.

 

문제는 util 클래스와 같은 contoller 이외의 클래스에서 세션값에 접근 할 수 있어야 한다는 것이다.

권한 체크 함수에 세션값을 넘기면 좋기는 하겠지만

controller 이외의 클래스에스 세션값을 확인 하기도 어렵기도 하지만

일일이 세션값을 확인해서 넘기는 작업은 번거롭고, 간편하지도 않으며, 그다지 좋아 보이지 않는다.

(값을 확인 할 수 있으면 그 자리에서 처리하는게 낫지 않을까?)

 

이때 사용할 수 있는 방법이 RequestContextHolder와 ServletRequestAttributes를 이용해 값을 읽어 오는 방법이다.

 

방법은 간단하다.

public class UserTaskCheck {

    private UserTaskCheck(){
    }
    
    public static boolean hasRole(){
    	boolean isRole = false;
        
        ServletRequestAttributes servletRequestAttribute = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        HttpSession httpSession = servletRequestAttribute.getRequest().getSession(ture);
        
        String userTask = httpSession.getAttirbute("user_task").toString();
        if(userTask != null){
            if(userTask.equal("admin")){
    	        isRole = true;
            }
        }
        return isRole;
    }
}

 

RequestContextHolder로 부터 현재의 ServletRequestAttirbutes의 객체를 얻어 올 수 있다.

그리고 ServletRequestAttributes로 부터 세션 정보를 얻어 올 수 있다.

 

여기서 getSession(true)와 getSession(false)를 사용 할 수 있는데, 아래와 같이 약간의 차이점이 있다.

 .getSession(true) : HttpSession이 존재하면, 해당 HttpSession을 반환하고, 없으면 새로 생성해서 반환
 .getSession(false) : HttpSession이 존재하면, 해당 HttpSession을 반환하고, 없으면 null을 반환 

.getSession(false)를 사용할 것이라면 조금 조심해서 사용해야 한다.(반드시 null 체크를 해야 한다.)

 

반응형