使用Spring Security,管理授权查询响应的正确方法是什么?

时间:2015-06-15 17:27:24

标签: java spring spring-security

使用Spring Security(v.3.2.5),管理授权查询响应的正确方法是什么?

我已将Spring Security配置为根据用户角色来管理对系统不同部分的访问。但在许多地方,校长正在查询数据(例如,查找以前持久的详细信息"由他/她拥有#34;)。

简单的用例可以简单地在代码中处理,但我们有一个更复杂的数据检索用例,我喜欢更集中的权威引擎,我试图利用Spring Security。

大多数示例和在线指针似乎都专注于锁定API调用,而不是从这些调用生成的数据。 (用户级别v。角色级别)。

有关如何完成此操作的指南或关注应用程序层数据访问的教程?

TIA。

1 个答案:

答案 0 :(得分:3)

您正在尝试查询用户可能不是所有者但仍应能够访问的项目列表,是吗?像共享文档或某些文件一样。

如果是这种情况,则需要升级到Spring Security 4。它允许使用Spring Data的SpEL表达式。例如:

@Query("select m from Message m where m.to.id = ?#{ principal?.id }")

请参阅:

http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#data

您需要在SQL中执行此操作,而不是使用@PostAuthorize,因为分页将与后者相混淆。

如果您有预算,我会选择Oracle VPD。

如果你可以等到9月,Postgres 9.5会有Row Security。

有些人在这里分享:http://blog.databasepatterns.com/2014/12/postgresql-row-security-sharing-rls-vpd.html