2016-07-13 2 views
4

일반 사용 사례를위한 RESTful 서비스를 정의하는 올바른 방법을 알고 싶습니다.REST - 사용자 ID 전송과 주체로부터 사용자 ID 가져 오기

현재 사용자 프로필을 업데이트하는 RESTful API를 작성 중입니다. 요청 내에서 현재 사용자의 ID를 전송해야합니까? 사용자가 자신의 세부 사항 만 편집 할 수 있도록 서버 측에서 유효성 검사가 필요합니다. 그래서 사용자 ID와 Principal 객체에 대한 검사를 추가해야합니다. 또한 클라이언트 측에서는 현재 사용자 ID를 어딘가에 유지해야합니다.

POST /user/{id} 

또는 사용자 ID를 보내지 않고 Principal 객체에서 사용자 세부 정보를 가져올 수 있습니다. 무익한 보안 API와 같은 것이 없다는 것을 알고 있으므로 올바른 접근 방법이 될까요?

첫 번째 접근법에서 요구되는 것처럼 현재 사용자의 유효성을 검사하는 Spring의 기능을 인식하지 못합니다. 그것이 있으면 알려주세요.

답변

2

다른 사용자를 업데이트 할 권한이있는 관리자가 업데이트를 보내려는 경우를 고려하십시오. 이 경우 POST /user/{id}이됩니다. 일반 사용자의 경우가 아니어야합니다.

스프링 보안을 사용하면 컨트롤러 메소드에서 @PreAuthorize 표현식을 사용할 수 있습니다. 그러면 다음과 같이 보입니다.

@PostMapping("/user/{id}") 
@PreAuthorize("hasRole('ADMIN') || (principal.id == #id)") 
public User updateUser(@RequestBody User newInfo, @PathVariable Long id) { 
    ... 
} 
관련 문제