В @PreAuthorize
вы можете использовать SpEL для доступа к свойству входного аргумента. Он также предоставляет встроенное выражение authentication
для доступа к экземпляру Authentication
(и ярлык principal
для доступа к Authentication.getPrincipal()
) из текущей SecurityContext
.
Для проверки подлинности JDBC по умолчанию:основной является тот экземпляр UserDetails
, который не хранит идентификатор пользователя. Поэтому я предлагаю вам настроить его, чтобы включить идентификатор пользователя. После этого вы можете сделать что-то вроде:
@PutMapping("/users/{id}")
@ResponseStatus(HttpStatus.ACCEPTED)
@PreAuthorize("#updatedUser.userId == principal.userId")
public User updateUser(@PathVariable("id") Long userId, @RequestBody User updatedUser){
}