java如何实现定制的spring安全acl?
我正在使用Spring开发一个应用程序。在访问控制部分,我想使用SpringSecurityACL(我是Acl新手)。我想在我的应用程序中基于两点实现ACL:
- 应用程序应该有五个权限:
read
、create
、modify
、delete
和Administrator
李> - 权限是层次结构,当用户拥有
create
权限时,它应该能够read
,或者当用户拥有modify
权限时,它应该能够read
、create
和modify
等等
可能吗?怎么做强>
更新:
我的应用程序基于Spring MVC RESTFUL。当用户想要修改自己的信息时,他会使用Ajax发送一些json数据。json数据的示例如下所示:
{
"id": 1,//user Id
"name": "my name",
"password": "my password",
"email": "email@email.com",
...
}
现在,恶意用户可以登录到自己的帐户。此用户可以像所有其他用户一样modify
其数据。在他发送数据之前,更改他的id和modify
另一个帐户用户信息。我想使用ACL来防止这种颠覆性的工作。用户可以访问其他人,其他人可以修改他的信息
# 1 楼答案
您可以使用spring security实现一个简单的解决方案。其想法是创建一个实现org的类。springframework。安全通道PermissionEvaluator并重写方法hasPermission。看下一个例子:
现在,通过这个实现,您可以在服务层中使用@PreAuthorize注释,如下所示:
@PreAuthorize注释中的“hasPermission”从updateUserProfileInASecureWay方法的参数接收targetDomainObject#profile,并且我们传递所需的权限(在本例中为“update”)
该解决方案通过实现“小”ACL避免了ACL的所有复杂性。也许这对你有用
# 2 楼答案
您可以使用以下示例中使用的角色层次结构组合。Spring acl具有基本权限,如果要实现自定义权限,需要在api中创建扩展基本权限类的自定义权限类。我们可以为每种权限定义角色,并定义角色层次结构,如下所示