[ 전자정부 ] spring security 설정 간소화로 원하는 권한 부여하기

2020. 5. 7. 12:45Spring

728x90
반응형
SMALL

로그인 부분에서

springSecurity.doFilter(new RequestWrapperForSecurity(httpRequest, loginVO.getUserSe() + loginVO.getUserId(), loginVO.getUniqId()), httpResponse, chain);

이렇게 호출하여 세션을 처리하는 코드를 볼 수 있습니다.

 

전자정부 프레임워크를 사용하면 context-security.xml라는 파일이 있습니다.

여기에 jdbcUsersByUsernameQuery 항목과

jdbcAuthoritiesByUsernameQuery 항목이 있습니다.

jdbcUsersByUsernameQuery는 호출할 때 넘긴 파라미터로 쿼리를 돌려서 계정의 기본 정보를 가져오는 것이고,

jdbcAuthoritiesByUsernameQuery는 파라미터로 계정의 권한을 가져오는 것입니다.

 

보통 기본 값이 userId를 파라미터로 넘겨서 ID에 대한 기본 정보와 권한을 조회하기 때문에 DB에 ID를 관리하지 않으면 설정 간소화로 권한 관리하기가 힘듭니다.

그래서 위의 자바 코드에서 ID를 넘기는 게 아니라 다른 식별자로 권한을 부여하고 싶어서 다음과 같이 작성할 수 있지만 원하는 권한이 제대로 부여되지 않습니다.

springSecurity.doFilter(new RequestWrapperForSecurity(httpRequest, identifier, loginVO.getUniqId()), httpResponse, chain);

 

이럴 때는 EgovSessionMapping.java에서 다시 설정해 주셔야 합니다.

@Override
protected EgovUserDetails mapRow(ResultSet rs, int rownum) throws SQLException {
    String userId = rs.getString("user_id");
    ...
    
    boolean strEnabled = true;
    
    LoginVO loginVO = new loginVO();
    loginVO.setId(userId);
    ...
    
    return new EgovUserDetails(userId, uniqId, strEnabled, loginVO); 
}
    
    

이게 기본값인데 이렇게 넘기게 되면 다시 jdbcAuthoritiesByUsernameQuery의 쿼리를 돌릴 때 userId를 파라미터로 쿼리를 돌리게 됩니다. 그래서 여기도 id로 넘기는 게 아니라 원하는 식별자를 넣어주시면 됩니다.

@Override
protected EgovUserDetails mapRow(ResultSet rs, int rownum) throws SQLException {
    String userId = rs.getString("user_id");
    ...
    
    boolean strEnabled = true;
    
    LoginVO loginVO = new loginVO();
    loginVO.setId(userId);
    ...
    
    return new EgovUserDetails(identifier, uniqId, strEnabled, loginVO); 
}
    
    

 

728x90
반응형