java Spring安全性@PreAuthorize或@PreFilter
最近我发现有一种方法可以使用Spring安全性预授权方法。但是我不确定我是否能用这个注释实现我想要的
@DeleteMapping("/delete/{configId}")
public ResponseEntity<Object> deleteMlpConfig(@RequestHeader HttpHeaders headers,
@PathVariable("configId") long mlpConfigId, Authentication authentication) {
MlpConfig config = mlpConfigService.findById(mlpConfigId);
User user = userService.findByUsername(authentication.getName());
if (config.getUser().equals(user)) {
mlpConfigRepository.delete(config);
return ResponseEntity.ok(new MessageResponse("Configuration removed successfully!"));
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Error: Unauthorized");
}
}
您可以看到这个if子句。此if子句应为预授权。只有当请求此delete命令的用户拥有此配置时,他才应该能够调用该方法
有问题的是,前端只将已删除配置的id发送到已删除配置,并且必须加载配置以检查我猜的任何内容。所以像这样的事情是行不通的:
@PreAuthorize("#config.user == authentication.id")
我可以通过预授权处理它吗?或者这里的最佳实践是什么
# 1 楼答案
您可以通过执行以下操作来实现您的目标:
然后: