Pre*_*hev 9 spring roles spring-security
在我的基于Spring的应用程序中,我目前有基本角色,如ADMIN和USER.
是否可以定义从USER继承的用户角色,如PHOTO_UPLOADER,还可以检查进行调用的用户是否实际上是照片的所有者?
我厌倦if (currentUser.id == photo.uploader.id)
了一遍又一遍地在我的控制器动作中写同样的东西.它也适用于其他实体.
Ral*_*lph 12
您可以使用像Tomasz Nurkiewicz建议的ACL来处理它.但Spring Securitz ACL很复杂,记录很差.(我所知道的最好的资源是本书:Spring Security 3 - Spring Security的作者)
但如果你真的只需要这个简单的if (currentUser.id == photo.uploader.id)
测试,那么我会推荐另一种技术.
可以增强可以在@PreAuthorize注释中使用它们的方法安全性表达式.喜欢:
@PreAuthorize("isPhotoOwner(#photo)")
public void doSomething(final Photo photo) {
Run Code Online (Sandbox Code Playgroud)
要实现这样的表达式isPhotoOwner
,核心非常简单:
public class ExtendedMethodSecurityExpressionRoot extends MethodSecurityExpressionRoot {
public ExtendedMethodSecurityExpressionRoot(final Authentication a) {
super(a);
}
/**
*
*/
public boolean isPhotoOwner(final Photo photoObject) {
if (photoObject == null) {
return false;
}
Photo photo = (photo) photoObject;
return photo.getCreator().getLogin().equals(authentication.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,注册ExtendedMethodSecurityExpressionRoot还有一些额外的工作要做.--- 我现在没有时间,如果你愿意尝试这种做法,那就留下一份意见,我将描述其余的
归档时间: |
|
查看次数: |
1933 次 |
最近记录: |