인프런 커뮤니티 질문&답변

류혜상님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

계층적 권한 적용하기 - RoleHierarchy

인메모리 인가방식 질문드립니다.

24.06.11 08:03 작성

·

104

0

안녕하세요 강사님,
실전강의 관련하여 추가질문드립니다.

아래 MapBasedUrlRoleMapper쪽에서

ROLE_ 으로 시작되는 권한은 PersistentUrlRoleMapper를 통해 DB에서 불러오고 나머지는 MapBasedUrlRoleMapper를 사용해서 명시를 할 수 있을까요?

public class MapBasedUrlRoleMapper implements UrlRoleMapper{

    private final LinkedHashMap<String, String> urlRoleMappings = new LinkedHashMap<>();
    @Override
    public Map<String, String> getUrlRoleMappings() {

        urlRoleMappings.put("/", "permitAll");
        urlRoleMappings.put("/css/**", "permitAll");
        urlRoleMappings.put("/js/**", "permitAll");
        urlRoleMappings.put("/images/**", "permitAll");
        urlRoleMappings.put("/favicon.*", "permitAll");
        urlRoleMappings.put("/*/icon-*", "permitAll");
        urlRoleMappings.put("/signup", "permitAll");
        urlRoleMappings.put("/login", "permitAll");
        urlRoleMappings.put("/logout", "permitAll");
        urlRoleMappings.put("/denied", "authenticated");
        urlRoleMappings.put("/", "ROLE_USER");
        urlRoleMappings.put("/user", "ROLE_USER");
        urlRoleMappings.put("/admin/**", "ROLE_ADMIN");
        urlRoleMappings.put("/manager", "ROLE_MANAGER");
        urlRoleMappings.put("/db", "hasRole('DBA')");

        return new HashMap<>(urlRoleMappings);
    }
}

답변 1

0

정수원님의 프로필 이미지
정수원
지식공유자

2024. 06. 12. 19:46

일단 강의에서는 두개의 유형을 어떤 조건에 따라 스위칭 하도록 되어 있지는 않습니다.

이 부분은 사실 설계의 문제이고 설계에 따라 어떻게 구현할 것인지의 부분이라 질문하신 흐름을 어떻게 처리할 것인지 고민해야 할 것 같습니다.

MapBasedUrlRoleMapper 와 PersistentUrlRoleMapper 는 전략패턴처럼 사용되고 있기 때문에 ROLE_ 로 시작할 때는 PersistentUrlRoleMapper 를 넘겨주고 그외에는 MapBasedUrlRoleMapper 를 넘겨주는 식으로 할 수 있지만 ROLE_ 로 시작하는 분기문을 어떤 기준으로 가져오거나 구성할 지는 여러 가지로 고민해야 할 부분입니다.

왜냐하면 ROLE_ 접두어는 맵이든 DB 든 권한 정보에 포함되는 데이터이기 때문에 맵이나 DB 를 구분할 수 있는 기준이 가능한지부터 판단해 보아야 합니다