【发布时间】:2020-03-23 10:30:13
【问题描述】:
假设我有以下控制器。 (假设Order.customer 是订单所属的客户,并且只有他们应该能够访问它。)
@RestController
@RequestMapping("/orders")
public class OrderController {
@GetMapping
@PostAuthorize("returnObject.customer == authentication.principal")
public Order getOrderById(long id) {
/* Look up the order and return it */
}
}
查找订单后,@PostAuthorize 用于确保它属于经过身份验证的客户。如果不是,Spring 会以 403 Forbidden 响应。
这样的实现有一个问题:客户可以区分不存在的订单和他们无权访问的订单。理想情况下,在这两种情况下都应该返回 404。
虽然这可以通过将Authentication 注入处理程序方法并在那里实现自定义逻辑来解决,但有没有办法使用@PostAuthorize 或类似的声明性API 来实现?
【问题讨论】:
标签: java spring spring-security