Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要db请求的Spring安全性和基于复杂方法的规则_Spring_Security - Fatal编程技术网

需要db请求的Spring安全性和基于复杂方法的规则

需要db请求的Spring安全性和基于复杂方法的规则,spring,security,Spring,Security,我有一个设计问题。我开始需要实现基于方法的安全性,以确保我的用户不会尝试任何有趣的事情 我有一些用户“拥有”某个业务对象,他们可以添加其他用户“拥有”此业务对象的子对象。我想检查的是,试图创建新用户的用户是否确实是要为其添加新用户的对象的父对象的所有者 这不是很清楚,但我的问题是:当它意味着我需要查询我的数据库来检查PermissionEvaluator中的内容时,这是一个非常糟糕的设计吗?如果没有,这可能吗?我似乎无法在SpEL@PreAuthorize规则使用的PermissionEvalu

我有一个设计问题。我开始需要实现基于方法的安全性,以确保我的用户不会尝试任何有趣的事情

我有一些用户“拥有”某个业务对象,他们可以添加其他用户“拥有”此业务对象的子对象。我想检查的是,试图创建新用户的用户是否确实是要为其添加新用户的对象的父对象的所有者


这不是很清楚,但我的问题是:当它意味着我需要查询我的数据库来检查PermissionEvaluator中的内容时,这是一个非常糟糕的设计吗?如果没有,这可能吗?我似乎无法在SpEL@PreAuthorize规则使用的PermissionEvaluator中注入Spring组件(例如@Service bean)。

要根据数据库表动态确定权限,Spring security ACL是最安全的选择。但作为替代方案,您可以创建一个自定义访问决策管理器,该管理器具有查询数据库的自定义投票者

检查此答案是否存在以下问题:在您的情况下,您需要一个基于一致性的访问决策投票者,一个经过身份验证的投票者检查用户是否已登录,一个自定义DBPermissionsNoter根据参考数据决定用户是否具有权限


投票者是SpringBean,因此您可以在其中注入所需的任何DAO或服务。

为什么不尝试spring基于角色的安全性?尤其是因为您已经在使用Spring。为什么要自己写?我已经使用了基于角色的安全性,但是对于某些用途,角色并不是细粒度的。例如,“我的用户”在其角色中具有“可以添加用户”权限,但这并不阻止他们添加链接到自己不拥有的业务对象的用户。我需要首先检查他们是否确实被允许做这个操作,他们是否可以对那个物体做这个操作,你明白我的意思吗?我还试图避免使用基于ACL的安全性,这显然会解决所有问题,如果可能的话,我希望避免一些成本。谢谢,我会研究它,或者接受我必须实现基于ACL的安全性!