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

ymg12347님의 프로필 이미지
ymg12347

작성한 질문수

스프링부트 시큐리티 & JWT 강의

스프링부트 시큐리티 5강 - 시큐리티 권한처리

권한 설정 부여가 안됨

작성

·

874

0

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
    http.csrf(CsrfConfigurer::disable);
    http.authorizeHttpRequests(authorize -> authorize
            // "/user/~" 이 주소로 들어오면 인증이 필요함 -> 인증만 되면 들어갈 수 있는 주소!
            .requestMatchers("/user/**").authenticated()
            // "/manager/~" 이 주소로 들어가기 위해서는 Admin과 Manager 권한이 있는 사람만 들어올 수 있음
            .requestMatchers("/manager/**").hasAnyRole(Role.ADMIN.name(), Role.MANAGER.name())
            // "/admin/**" 이 주소로 들어가기 위해서는 Admin 권한이 있는 사람만 들어올 수 있음
            .requestMatchers("/admin/**").hasAnyRole(Role.ADMIN.name())
            // 설정한 주소가 아니면 누구나 들어갈 수 있음
            .anyRequest().permitAll()

    );

enum을 사용하여 Spring Security를 다음과 같이 설정했습니다.

 

public enum Role {
    USER, MANAGER, ADMIN
}

 

enum은 다음과 같이 작성했습니다.

 

DB는 다음과 같습니다.

 

문제가 없는 것 같은데.. /admin 또는 /manager로 들어갈 시에 403에러가 뜹니다. 시큐리티 설정에서 문자열로 바꾸거나 ROLE_ 붙여도 안되고... 현재 쓰고있는 버전은 스프링 3.X버전, 시큐리티 6.X버전입니다.

에러가 나는 이유가 무엇일까요?

답변 2

0


처럼 db의 role에 직접 ROLE_xxx로 설정해주니 권한 인식 하네요

-2

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

ymg12347님의 스프링 시큐리티 설정과 관련된 문제를 확인해보겠습니다. 스프링 시큐리티 설정 시 권한 부여 관련하여 문자열에 “ROLE” 접두어를 붙여야 할 수 있습니다. 이는 스프링 시큐리티 내부에서 사용하는 기본 포맷이기 때문에, 해당 접두어 없이 설정 시 권한을 찾을 수 없어 403 에러가 발생할 수 있습니다. 스프링 시큐리티 6.X 버전을 사용 중이라면 hasAnyRole 메서드에 전달하는 역할 이름에 “ROLE” 접두어를 포함시켜야 할 수 있습니다. 예를 들어,

.requestMatchers("/manager/**").hasAnyRole("ROLE_ADMIN", "ROLE_MANAGER")
.requestMatchers("/admin/**").hasAnyRole("ROLE_ADMIN")

와 같이 설정을 변경해야 할 수 있습니다.

스프링 부트 3.X와 스프링 시큐리티 6.X 버전에서 “ROLE_” 접두어를 자동으로 추가하지 않도록 변경되었을 가능성을 고려해야 합니다. 자세한 내용은 스프링 시큐리티 참조 문서(https://docs.spring.io/spring-security/reference/6.1.5/security-core/index.html)에서 확인하실 수 있습니다.

문제가 계속된다면, 자세한 로그를 통해 추가적인 문제가 없는지 확인해보시기 바랍니다.

ymg12347님의 프로필 이미지
ymg12347

작성한 질문수

질문하기