当涉及到spring安全性时,有多少自定义实现是明智的?它是如何优化的,或者哪些部分是最优化的,除非绝对必要,否则不应该在哪里自定义实现?
我想知道这一点,因为我正在考虑一种实现动态all的方法,该动态all授予或撤销单个对象以及该类型的所有对象甚至任何字符串标识符的主体访问权限。如果我想说
@PreAuthorize("hasPermission(#person, details)")
public void getDetailsForPerson(Person person)以及
@PreAuthorize("hasPermission('package.path.Person', read)")
public void getAllPersons()以及
@PreAuthorize("hasPermission('Person', read)")
public void getAllPersons()以及
@PreAuthorize("hasPermission(#id, 'package.path.Person', read)")
public void getOnePerson(int id)我将不得不实现PermissionEvaluator。既然这样,为什么我应该使用确切的spring-security ACL数据模型(如Spring Security Reference Appendix A.3中所述),而不是实现我自己的模型呢?如果我想要允许对对象类型或字符串以及对象实例进行权限评估,我无论如何都必须实现我自己的ACLService。
ObjectIdentity查找也是如此:我必须自己实现它们,因为我希望从@Entity的serialVersionUID生成一个OID,以便能够授予对类型权限的访问权限。
因此,当我考虑越来越多的自定义实现时,我想知道,我是否仍然在正确的轨道上。看看像the Denksoft blog这样的教程。我觉得我错过了很多spring-security的功能,我们以后可能会用到。或者只是spring-security非常强大和复杂,以防你需要它,但如果你愿意,你可以自己完成大部分工作,只需使用通用框架将其整合在一起?
或者,我不坚持测试的实现是不是造成了潜在的安全漏洞?既然我坚持spring-security提供的接口,那么从安全和软件设计的角度来看,我脑海中的东西是已经危险的,还是仍然可以接受的?我还没有定制太多给定的实现……
所以..。对于我们计划要做的事情(类型和对象的权限)以及自定义spring-security的想法将非常受欢迎。
干杯!
发布于 2011-10-19 15:20:57
嗯,似乎没有人想在这里分享他们关于spring安全定制的经验、想法或技巧,所以我将这个标记为已回答。
简而言之,我们最终要做的就是定制实现所有与数据库交互的spring安全接口,以使用我们自己的JPA/Hibernate访问堆栈。这意味着要实现
Authentication
CustomerDetailsService来处理我们的帐户tableRoleHierarchy来解析我们自己的层次结构表(1:n关系到Role,它有一个m:n to Account)PersistentLoginToken来持久化DB 中的remember-me标记
对于我们特殊的访问控制列表,它还支持为某一类型的所有对象设置权限:
用于构建ACLs
PermissionEvaluator以支持类类型(字符串形式)参数的MutableAclService,Acl、AccessControlEntry和LookupStrategy 总而言之,我们做了相当多的工作,仍然有一些我们的实现所缺乏的东西。这值得吗?当然,因为我们现在有更多的控制,更多的灵活性和新的功能。它是稳定的吗?我们将看到,到目前为止,自定义实现的45个单元测试听起来很多,但实际上并非如此。
https://stackoverflow.com/questions/7487431
复制相似问题