인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

chaelynjang님의 프로필 이미지
chaelynjang

작성한 질문수

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

계층적 권한 적용하기 - RoleHierarchy

setHierarchy deprecated

작성

·

101

0

안녕하세요 강사님 좋은 강의 감사드립니다.

처음부터 지금까지 모든 강의 내용을 직접 코딩을 따라 하며 실습하고 있었는데 해당 영상에서 질문할 것이 있습니다.

RoleHierarchyImpl을 빈 등록할 때 setHierarchy는 deprecated 되어서 fromHierarchy로 했더니 사진의 에러가 발생합니다.

두 메소드의 코드가 다르기 때문에 이런 에러가 발생한다고 추측되는데 deprecated된 setHierarchy를 사용하는 대신 다른 방안이 있을지 궁금해서 여쭤봅니다.

 

사실 계층적 권한 관련된 내용을 처음 설명해주시는 관련 영상(섹션 9의 마지막 영상)에서는 setHierarchy 대신 fromHierarchy를 사용했어도 잘 동작했었기에 더 궁금합니다.(그때는 물론 role을 db로 관리하지 않는 간단한 예제였습니다)

 

확인해주시고 코멘트 달아주시면 많은 도움이 될 것 같습니다. 감사합니다.

image.png
@Configuration
public class AuthConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

    // 커스텀 계층 권한 적용
    @Bean
    public RoleHierarchyImpl roleHierarchy(RoleHierarchyService roleHierarchyService) {
        String allHierarchy = roleHierarchyService.findAllHierarchy();
        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
        roleHierarchy.fromHierarchy(allHierarchy);
        //roleHierarchy.setHierarchy(allHierarchy);
        return roleHierarchy;
    }
}

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

chaelynjang님께서 질문하신 계층적 권한 설정에서 RoleHierarchyImpl.setHierarchy 메소드의 deprecated 이슈와 관련하여 답변드리겠습니다.

먼저, 질문해주신 코드와 에러를 보면, RoleHierarchyImpl 사용 시 setHierarchy 대신 fromHierarchy 메소드를 사용한 것과 관련된 문제로 보입니다.

fromHierarchy 메소드가 setHierarchy 메소드의 대안으로 제공됐으나, 정확한 사용법이나 역할이 다를 수 있습니다. 따라서 이로 인해 NullPointerException 등이 발생할 수 있습니다.

해결 방안:

1. fromHierarchy 메소드 사용 시 문제 해결:

만약 fromHierarchy 메소드를 사용하고 싶으시다면, 해당 메소드가 기대하는 포맷 또는 입력값을 정확하게 제공해야 합니다. RoleHierarchyImpl 문서를 참조하여 fromHierarchy 메소드의 사용 예제를 확인하는 것이 좋습니다.

@Configuration
public class AuthConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

    @Bean
    public RoleHierarchyImpl roleHierarchy(RoleHierarchyService roleHierarchyService) {
        String allHierarchy = roleHierarchyService.findAllHierarchy();
        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
        roleHierarchy.fromHierarchy(allHierarchy);  // 메소드 사용 확인 및 필요 시 포맷 검증
        return roleHierarchy;
    }
}

2. roleHierarchy.setHierarchy로 대체:

만약 fromHierarchy 메소드가 잘 작동하지 않는 경우, 기존의 setHierarchy 메소드를 사용하되 deprecated 경고를 무시하고 사용하실 수 있습니다. 추후 메소드가 제거되면 다른 대안을 찾아볼 수 있습니다.

@Configuration
public class AuthConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

    @Bean
    public RoleHierarchyImpl roleHierarchy(RoleHierarchyService roleHierarchyService) {
        String allHierarchy = roleHierarchyService.findAllHierarchy();
        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
        roleHierarchy.setHierarchy(allHierarchy);  // deprecated 경고 무시하고 사용
        return roleHierarchy;
    }
}

위 방식 중 하나를 적용해보고, 여전히 문제가 발생한다면 아래와 같은 유사한 질문에 대한 답변이 도움이 될 수 있습니다.

관련 질문 URL:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

chaelynjang님의 프로필 이미지
chaelynjang

작성한 질문수

질문하기