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에 포함시키는 이유는 여러 가지가 있습니다:
- 자원 식별: 시퀀스 번호는 특정 자원을 고유하게 식별합니다. URL에 포함시킴으로써 클라이언트가 요청하고자 하는 자원을 명확히 지정할 수 있습니다.
- RESTful 설계 원칙: REST API에서는 자원(리소스)을 URL로 표현하는 것이 일반적입니다. 시퀀스 번호를 포함시키면 해당 자원에 대한 CRUD(생성, 조회, 업데이트, 삭제) 작업을 쉽게 수행할 수 있습니다. 예를 들어, /users/{userId}와 같은 형식으로 특정 사용자를 조회하거나 수정할 수 있습니다.
- 직관성: URL에 포함된 시퀀스 번호는 요청의 의도를 명확히 전달합니다. 예를 들어, /orders/123는 123번 주문을 조회하는 요청임을 쉽게 이해할 수 있습니다.
- 버전 관리: URL에 시퀀스 번호를 포함시킴으로써 자원의 버전 관리를 용이하게 할 수 있습니다. 예를 들어, 특정 버전의 자원을 요청할 수 있는 경로를 설정할 수 있습니다.
- 캐시 및 성능: 시퀀스 번호를 URL에 포함시키면, 클라이언트와 서버 간의 캐시 효율성을 높일 수 있습니다. 특정 자원에 대한 요청은 캐시로부터 직접 제공될 수 있습니다.
- 상태 유지: 특정 자원에 대한 상태를 유지하기 위해 URL에 시퀀스 번호를 포함할 수 있습니다. 이를 통해 클라이언트가 자원의 현재 상태를 정확히 이해하고 작업을 수행할 수 있습니다.
결론적으로, URL에 시퀀스 번호를 포함시키는 것은 RESTful API 설계 원칙에 따라 자원을 명확히 식별하고, 직관적이며 효율적인 방식으로 자원에 접근하기 위함입니다.
'springboot' 카테고리의 다른 글
[springboot] @LoginUser 어노테이션 (0) | 2024.10.10 |
---|---|
[springboot] Spring Security의 /login 요청 시 처리 과정(세션 저장) (5) | 2024.10.09 |
[springboot] 스프링부트 2점대에 swagger 3점대 연결 (0) | 2024.04.14 |
[springboot] 유효성 검사 (0) | 2024.04.07 |
[springboot] 엔티티 int VS Integer 타입 차이 (0) | 2024.04.06 |