1

我使用 Spring Security 来保护和评估 @PostAuthorize 和 @PreAuthorize 注释中的表达式以授权服务方法。我有一个需求,需要检查返回的对象是否具有登录系统并调用此方法的相同用户 ID。

// this allows the ids of other users too
@PostAuthorize("#returnObject!=null?returnObject.userId==principal.account.acid:true")
public AudioClip findAudioClip(int clipId) {
     .....
     AudioClip clip = dao.findById(clipId);
     // may also be null
     return clip;
}

音频剪辑.java

@Component
public class AudioClip implements java.io.Serializable {

private java.math.BigDecimal id;
private java.lang.Integer    userId;
.....
}

从数据库中获取的对象包含创建此 db 对象的 userId。因此,只有他有资格访问该组件。怎么比较returnObject.userId和已经登录系统的userid?

4

2 回答 2

7

@holmis,正如您所指出的,罪魁祸首是代码中的 # !这段代码

@PostAuthorize("returnObject!=null?returnObject.userId==principal.account.aid:true")

作品!

于 2014-08-20T17:55:16.543 回答
1

同样的事情,但我发现这比@vijay 的答案更好。

@PostAuthorize("returnObject == null ?: returnObject.userId == principal.account.aid")

6.5.14 猫王操作员

于 2020-10-30T01:41:17.667 回答