• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

권한 설정 부여가 안됨

24.01.17 01:02 작성 조회수 393

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

bandisnc님의 프로필

bandisnc

2024.02.17


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

-2

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.18

안녕하세요, 인프런 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)에서 확인하실 수 있습니다.

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