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
'Spring > Spring-Security' 카테고리의 다른 글
JWT 토큰 + @AuthenticationPrincipal (0) | 2023.02.11 |
---|---|
Spring Security + JWT 로그인 구현하기 (Access Token) (0) | 2023.01.23 |
SpringSecurity 와 JWT 의 구조, 동작 과정 (0) | 2022.10.23 |
SpringSecurity DB 없이 테스트 방법 (0) | 2022.10.20 |
JWT (Json Web Token) 의 개념 (0) | 2022.10.19 |
댓글