【发布时间】:2014-10-13 20:23:30
【问题描述】:
我使用 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;
}
AudioClip.java
@Component
public class AudioClip implements java.io.Serializable {
private java.math.BigDecimal id;
private java.lang.Integer userId;
.....
}
从数据库中获取的对象包含创建此 db 对象的 userId。因此,只有他有资格访问该组件。如何比较returnObject.userId和登录系统的userid?
【问题讨论】:
-
是的,我会改正的
-
可以肯定的是,您的 PostAuthorize 注释,虽然看起来不错,但不会阻塞任何东西,对吧?如果是真的,你能尝试添加一个
@PreAuthorize("denyAll"),如果它正确地分组@PreAuthorize("hasRole('ROLE_CAESAR_IMPERATOR')")(假设你没有这样的角色)并说出会发生什么? -
编辑原始问题以发布正确答案令人困惑。您摆脱了 # 这是问题所在,以及为什么首先发布它。我花了一段时间才弄清楚问题和解决方案的区别是什么。
标签: java spring spring-security spring-el spring-4