JWT 기반 인증만 적용하고, 나중에 Spring Security 인가 매커니즘을 도입할 계획이다.
하지만 지금도 서비스 레이어에서 “리더 여부”를 체크해 403 Forbidden을 반환해야 해서,
무거운 시큐리티 설정 없이 가볍게 예외 처리하는 방법을 도입했다.
AuthorizationException
정의import org.springframework.http.HttpStatus
import org.springframework.web.server.ResponseStatusException
/**
* 리더 인가 실패 시 사용.
* TODO: 추후 Spring Security 전환 시 AccessDeniedException 으로 교체
*/
class AuthorizationException(message: String) :
ResponseStatusException(HttpStatus.FORBIDDEN, message)
ResponseStatusException
을 상속해 간단히 403 응답을 내리도록 했다.
나중에 전환할 때 AccessDeniedException
으로 한 번에 교체 가능하도록 TODO 주석을 남겼다.
fun updateConti(..., isLeader: Boolean) {
// TODO: SecurityContext 기반 권한 검증으로 전환
if (!isLeader) {
throw AuthorizationException("리더만 수정할 수 있습니다.")
}
// ...
}
isLeader 플래그 검증 → 커스텀 예외 던지기
Spring Security 의존 없이 바로 403 처리가 가능.
테스트 코드 예시
@Test
fun `리더 권한 없으면 AuthorizationException 발생`() {
val saved = contiRepository.save(sampleConti())
val req = sampleUpdateRequest()
assertThrows<AuthorizationException> {
contiService.updateConti(saved.id!!, req, userId, isLeader = false)
}
}
이 구조로 가볍게 “인가 실패” 흐름을 완성했다.
향후 Spring Security를 도입하면,
- AuthorizationException
→ AccessDeniedException
교체
- @PreAuthorize
등 어노테이션 방식 도입
- Security 설정 파일에서 URL 별 권한 정책 추가