본문 바로가기
Spring/Spring-Security

SpringSecurity Enum 타입으로 권한 설정하기

by YoonJong 2023. 2. 7.
728x90

사전과제로 여러 요구사항 중 권한을 부여하는 요구가 있어 정리했습니다.

이전에 프로젝트할 때 구현을 해보았을 때 권한부분에서는 순조로웠는데, 이번에는 403 에러가 계속 발생해 설정에 관한 부분을 다시 한번 학습할 수 있었습니다.

 

권한을 Enum 으로 지정한 클래스입니다.

Enum 으로 지정한 이유는 잘못된 권한(값) 이 들어오지 않도록 하기 위해서 입니다.

 

3가지 권한이 있는데 여기서 실수가 있었습니다. 

ROLE_ 을 안붙여줘서 403 에러가 발생했습니다.

붙여야 하는 이유는 SpringSecurity 가 prefix를 자동으로 "ROLE_" 을 넣어주기 때문입니다.

 

@Getter
public enum AccountType {

    ROLE_LESSOR("임대인"),
    ROLE_REALTOR("공인중개사"),
    ROLE_LESSEE("임차인"),
    ROLE_GUEST("손님");

    String value;

    AccountType(String value) {
        this.value = value;
    }

 

Controller 에 접근할 수 있는 방법은 2가지로 알고 있습니다.

1. Config 파일에서 직접 url 을 입력하고 권한을 부여

2. Controller 에서 직접 권한을 부여

 

저는 2번 방법을 사용하는 것이 코드량이나, 직관적으로 Controller 에 붙어져있어 보기 편해서 선택했습니다.

게시글 작성 Controller 부분의 일부분입니다.

// 게시글 작성
...
@PreAuthorize("hasAnyRole('REALTOR','LESSOR','LESSEE')")
...
public void boardWrite(@RequestBody ... ...) {
    ...
}

 

@PreAuthorize 를 사용해서 권한을 주면, 해당 권한을 가진 사용자만 접근이 가능하며 이외는 403에러가 발생합니다.

해당 에노테이션을 사용하기 위해서는 SecurityConfig 파일에 아래의 어노테이션을 추가해주어야 합니다.

@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
	...	
}

 

이후 포스트맨으로 테스트하면 권한에 따른 접근이 가능한지 확인해볼 수 있습니다.

728x90

댓글