Spring Boot中更新/删除操作的资源所有权验证最优方案
资源所有权校验方案咨询(UPDATE/DELETE场景)
我想了解在执行UPDATE和DELETE操作时,如何检查登录用户是否为目标资源的所有者,目前初步构思了两种实现思路,同时写了一个初步的ResourceAccessHelper工具类,但不确定其中调用的companyService.getCompanyById方法抛出异常是否合理——毕竟companyService.updateCompany本身也会执行相同的资源存在性与所有权检查。想请教哪种实现方式更优,或是有其他更合理的实现方案?
现有代码实现
CompanyDto类
@Builder @Data @NoArgsConstructor @AllArgsConstructor public class CompanyDto { private Long id; @NotNull @NotBlank private String companyName; @NotNull @NotBlank private String description; private AppUserDto adminProfile; }
CompanyController类
@PutMapping("/companies/{companyId}") public ResponseEntity<Void> updateCompany(@PathVariable("companyId") Long companyId, @RequestBody @Validated CompanyDto companyDto) { CompanyDto updatedCompany = companyService.updateCompany(companyId, companyDto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); }
ResourceAccessHelper工具类
@Component @RequiredArgsConstructor public class ResourceAccessHelper { private final CompanyService companyService; public boolean checkCompanyOwnership(Long companyId, Authentication authentication) { CompanyDto companyDto = companyService.getCompanyById(companyId); return companyDto.getAdminProfile().getUsername().equals(authentication.getName()); } }
内容的提问来源于stack exchange,提问作者solanke57
相关产品推荐
相关产品推荐

