현재 사용자의 역할은 USER, ADMIN, GUEST로 구분된다. 게시글 관련 기획에서 “게시글 리스트 조회”는 모든 역할이 접근 가능하고, “게시글 등록”은 USER와 ADMIN 역할만 수행할 수 있도록 결정되었다. Sprnig Security 설정을 수정하여 인가 권한을 설정했다.
1. Security 설정 파일 수정
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
// ... (다른 필드 및 의존성 주입 생략)
@Bean
protected SecurityFilterChain securityFilterChain(final HttpSecurity httpSecurity) throws Exception {
return httpSecurity
// ... (다른 설정 생략)
.authorizeHttpRequests(requestMatcherRegistry -> requestMatcherRegistry
// ... (다른 경로 설정 생략)
.requestMatchers("/api/v1/posts/register").hasAnyRole((ERole.USER.toString()), ERole.ADMIN.toString())
.anyRequest().authenticated())
// ... (나머지 설정 생략)
.getOrBuild();
}
}
.requestMatchers("/api/v1/posts/register").hasAnyRole((ERole.USER.toString()),ERole.ADMIN.toString())
"/api/v1/posts/register" 경로에 대해 Spring Security의 `hasAnyRole()` 메서드를 사용하여 `ERole.USER.toString()`, `ERole.ADMIN.toString()` 을 파라미터로 전달해 USER와 ADMIN 역할을 가진 사용자에게 접근 권한을 부여했다.
Spring Security는 내부적으로 "ROLE_" 접두사를 추가하여 권한을 확인한다. (ERole 열거형 참고)
2. ERole 열거형
@RequiredArgsConstructor
public enum ERole {
USER("USER", "ROLE_USER"),
ADMIN("ADMIN", "ROLE_ADMIN"),
GUEST("GUEST", "ROLE_GUEST");
private final String name;
private final String securityName;
@Override
public String toString() {
return this.name;
}
public String toSecurityString() {
return this.securityName;
}
}
`toString()` 메서드는 일반적인 역할 이름을 반환하고, hasAnyRole() 메서드에서 사용된다.
`toSecurityString()` 메서드는 “ROLE_” 접두사가 포함된 보안 이름을 반환하고, 다른 설정에서 활용될 수 있다.
반응형
'Projects > 청하-청년을 위한 커뮤니티 서비스' 카테고리의 다른 글
[청하] 9. 게시글 createDate 포멧 변경 (feat. DateTimeFormatter) (1) | 2024.10.08 |
---|---|
[청하] 8. 게시글 상세조회 기능 구현 (feat. LocalDateTime) (0) | 2024.10.07 |
[청하] 6. 게시글 등록 기능 - @ModelAttribute를 이용한 form-data 처리 개선 (0) | 2024.10.07 |
[청하] 5. 게시글 등록 기능 - @RequestPart를 이용한 JSON 데이터와 파일 데이터 분리 (0) | 2024.10.07 |
[청하] 4. 게시글 등록 기능 구현 (feat. NCP Object Storage 파일 업로드) (1) | 2024.10.06 |
댓글