본문 바로가기
springboot

[springboot] Spring Security 권한 설정 외 @PreAuthorize로 추가 권한 검사

by 개발LOG 2024. 10. 10.

Spring Security는 Security Config 파일을 통해 접근 제한을 설정할 수 있다.

하지만 대부분의 REST API 문서를 보면 userId 와 같이 기본키를  URL에 포함한다.

따라서 전달받은 id와 세션에 저장된 id를 비교해 권한 검사하는 것은 선택적이지만 보안을 위해 권장한다.

전달 받은 id와 세션의 정보를 비교 하는 방법으로 가장 가독성 있는 @PreAuthorize 어노테이션을 사용하는 방법이 있다.

컨트롤러에 @PreAuthorize 어노테이션 사용 예시

@RestController
public class UserController {

    @PreAuthorize("#userId == authentication.principal.id")
    @PutMapping("/users/{userId}")
    public void updateUser(@PathVariable Long userId) {
        // 사용자 정보 업데이트 로직
    }
}

 


번외: API 문서에서 시퀀스넘버(기본키)를 URL에 포함시키는 이유

API 문서에서 시퀀스 번호(기본키)를 URL에 포함시키는 이유는 여러 가지가 있습니다:

  1. 자원 식별: 시퀀스 번호는 특정 자원을 고유하게 식별합니다. URL에 포함시킴으로써 클라이언트가 요청하고자 하는 자원을 명확히 지정할 수 있습니다.
  2. RESTful 설계 원칙: REST API에서는 자원(리소스)을 URL로 표현하는 것이 일반적입니다. 시퀀스 번호를 포함시키면 해당 자원에 대한 CRUD(생성, 조회, 업데이트, 삭제) 작업을 쉽게 수행할 수 있습니다. 예를 들어, /users/{userId}와 같은 형식으로 특정 사용자를 조회하거나 수정할 수 있습니다.
  3. 직관성: URL에 포함된 시퀀스 번호는 요청의 의도를 명확히 전달합니다. 예를 들어, /orders/123는 123번 주문을 조회하는 요청임을 쉽게 이해할 수 있습니다.
  4. 버전 관리: URL에 시퀀스 번호를 포함시킴으로써 자원의 버전 관리를 용이하게 할 수 있습니다. 예를 들어, 특정 버전의 자원을 요청할 수 있는 경로를 설정할 수 있습니다.
  5. 캐시 및 성능: 시퀀스 번호를 URL에 포함시키면, 클라이언트와 서버 간의 캐시 효율성을 높일 수 있습니다. 특정 자원에 대한 요청은 캐시로부터 직접 제공될 수 있습니다.
  6. 상태 유지: 특정 자원에 대한 상태를 유지하기 위해 URL에 시퀀스 번호를 포함할 수 있습니다. 이를 통해 클라이언트가 자원의 현재 상태를 정확히 이해하고 작업을 수행할 수 있습니다.

결론적으로, URL에 시퀀스 번호를 포함시키는 것은 RESTful API 설계 원칙에 따라 자원을 명확히 식별하고, 직관적이며 효율적인 방식으로 자원에 접근하기 위함입니다.