1

我的原则是一个“foo”的实例,它有一个“bars”的集合。每个 'bar' 都有一个我想与作为请求的资源传递的 'id' 匹配的 id。我可以在 Spring SpEL 中执行以下操作吗?如果是这样,怎么办?

示例(伪语法;因为我不知道正确的方法,这就是我在这里的原因)

@PreAuthorize("principal.transactions.contains(instance where dto.transactionId == instance.id")")
public SomeResponse processTransaction(RequestDto dto) {
    ...
}

基本上相当于这个

for(Transaction t : principal.transactions){
    if(t.getId() == dto.getTransactionId())
        return true;
}
return false;
4

1 回答 1

1

我不确定是否可以使用普通的 SpEL。但是您可以尝试一种解决方法:

@PreAuthorize("principal.hasTransactionId(#dto.transactionId)")

然后您需要将hasTransactionId(Integer transactionId)方法添加到您的委托人。此方法必须返回一个布尔值。

于 2013-01-18T20:40:59.953 回答