无法实现我的目标
PostAuthorize
Resource
的子资源
User
PreAuthorize
验证用户登录的注释。
@RestController
@RequestMapping("/api")
public class AController {
private final AService aService;
public AController(AService aService) {
this.aService = aService;
}
@GetMapping("/users/{login:" + Constants.LOGIN_REGEX + "}/resources/{id}")
@PreAuthorize("#login == authentication.name")
public DeferredResult<Resource> getResource(@PathVariable String login, @PathVariable Long id) {
DeferredResult<Resource> deferredResult = new DeferredResult<>();
aService
.getResourceAsync(login, id)
.thenAccept(resource -> {
deferredResult.setResult(resource);
});
return deferredResult;
}
}
添加了所有权签入
AService
如果
资源
所有者和请求用户的登录名不匹配引发异常,该异常解析为
404
HTTP状态:
@Service
public class AService {
private final ARepository aRepository;
public AController(ARepository aRepository) {
this.aRepository = aRepository;
}
@Async
public CompletableFuture<Resource> getResourceAsync(String owner, Long id) {
Resource resource = aRepository.getResource(id);
if (!resource.owner.equals(owner)) {
// resolves to 404 response code
throw ResourceNotFounException();
}
return resource;
}
}