多帐户web应用程序中的JavaSpring身份验证、授权和所有权

多帐户web应用程序中的JavaSpring身份验证、授权和所有权,java,spring,security,spring-mvc,authorization,Java,Spring,Security,Spring Mvc,Authorization,我对web应用程序和安全性还不熟悉,我有一个基本的问题 设想一个java web应用程序有一个数据库但有多个帐户。让我们考虑一个简单的待办事项列表,其中人们只能在/item/item-id处访问自己的“项目”。例如: User1创建项目1和2 User2创建项目3和4 例如,如何防止User2访问/item/1 对我来说,这似乎超出了身份验证(这是谁?)和授权(他/她扮演什么角色?)的范围 我是否应该保留用户项的持久化映射,并在每次返回响应之前进行检查 这个问题是否有Spring(或其他)技

我对web应用程序和安全性还不熟悉,我有一个基本的问题

设想一个java web应用程序有一个数据库但有多个帐户。让我们考虑一个简单的待办事项列表,其中人们只能在/item/item-id处访问自己的“项目”。例如:

  • User1创建项目1和2
  • User2创建项目3和4
例如,如何防止User2访问/item/1

对我来说,这似乎超出了身份验证(这是谁?)和授权(他/她扮演什么角色?)的范围

我是否应该保留用户项的持久化映射,并在每次返回响应之前进行检查

这个问题是否有Spring(或其他)技巧/帮助工具?

授权不是“您扮演什么角色?”。它是“你可以这样做吗?”。该角色将在决定是否允许该主题方面发挥作用

您所描述的正是授权的目的

User2正试图访问(想想HTTP GET、POST、DELETE、PUT中的CRUD)位于
/item/1
的资源。允许吗?不,所以拒绝他们进入


我是否应该保留用户项的持久化映射,并在每次返回响应之前进行检查

如何执行授权取决于您。springsecurity提供了一些很好的工具,可以从数据库中执行此操作,同时将该逻辑与应用程序逻辑分离(如果需要的话)


我还想推荐另一个安全框架:。我认为配置比Spring Security更容易一些,我发现它的认证/授权逻辑更简单。

< P>除了Spring Security和Apache Shiro之外,您还需要考虑基于XACML的授权框架,例如SunxAcML、WSO2、公理学(免责声明:我为公理学工作)。 XACML是可扩展的访问控制标记语言。这是细粒度授权的事实标准。与SAML擅长身份联合/SSO一样,XACML帮助您实现授权

XACML为您提供了一个体系结构(见下图)和一种授权语言,您可以使用它来表示特定的授权场景,例如

  • 医生可以查看分配给他们的患者的病历
  • 护士可以查看属于同一诊所的患者的病历
  • 患者可以查看自己的记录以及作为监护人的患者的记录
你可以有任意多的规则。没有限制


谢谢!您能给我指一下利用Spring安全性实现与应用程序逻辑分离的授权的任何文档或示例代码吗?不幸的是,网络上有太多无用的东西……或是Shiro的例子,可以满足我的需求。我更喜欢把太多的东西混合在一起,但如果Shiro提供了大量的简化,那就太好了。@Gevorg网上应该有一些Shiro的例子。但他们的文档是最好的起点。了解两个主要组件:和。