Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
基于用户的Spring安全权限?(不基于角色)_Spring_Spring Boot_Hibernate_Spring Security - Fatal编程技术网

基于用户的Spring安全权限?(不基于角色)

基于用户的Spring安全权限?(不基于角色),spring,spring-boot,hibernate,spring-security,Spring,Spring Boot,Hibernate,Spring Security,假设我有一个由用户和项目组成的数据库。用户与项目之间存在一对多关系。用户可以使用rest端点执行操作 问题是: 如何验证此用户是否拥有此资源 我不希望恶意用户更改id,然后突然查看另一个人的项目详细信息/图像/等。请将其视为社交媒体(我的应用程序不是社交媒体,但试图说明问题):尽管具有相同的“状态”,但您只能查看您的图像,而不能查看另一个人的图像 大多数spring安全博客在线都使用基于角色的方法。我甚至不知道在这种情况下要搜索什么(尝试了多个搜索查询,但没有结果) 一个选项是对每个资源请求/操

假设我有一个由用户和项目组成的数据库。用户与项目之间存在一对多关系。用户可以使用rest端点执行操作

问题是: 如何验证此用户是否拥有此资源

我不希望恶意用户更改id,然后突然查看另一个人的项目详细信息/图像/等。请将其视为社交媒体(我的应用程序不是社交媒体,但试图说明问题):尽管具有相同的“状态”,但您只能查看您的图像,而不能查看另一个人的图像

大多数spring安全博客在线都使用基于角色的方法。我甚至不知道在这种情况下要搜索什么(尝试了多个搜索查询,但没有结果)

一个选项是对每个资源请求/操作运行某种类型的多连接查询,直到我到达该资源id并检查它的所有者用户,以检查它是否是登录的用户。然而,我不确定这种方式是否有效,因为在真实的应用程序中,一个链中有多个表(如果我手动使用这种方式,可能会有很多联接;例如:用户->项目->任务列表->…->注释;删除注释会触发一个大链)或者如何让“授权人”使用它

我有什么选择

如有必要:
我使用的是spring boot+hibernate/JPA+spring security

spring security具有以下概念:

身份验证:

证明演员就是它所担保的人。身份验证是使用凭据完成的,其中凭据可以采用任意形式-用户名/密码、令牌、硬件密钥等

您可以使用一组可接受的身份验证提供程序设置Spring安全性

授权:

给定一个经过身份验证的用户,决定该用户是否有权访问给定的资源。其中资源可以是:

  • HTTP端点
  • Java方法
  • 物体的属性
这里要做的是提供一个自定义授权方案


您可以阅读SpringSecurity的授权架构,包括如何设置自定义授权。一旦你准备好了,你可以边走边问一些具体的问题。

如果我听起来像个新手(我是),请原谅。在阅读了更多关于该主题的内容后,我必须制定自己的自定义授权决定方法。我是否在该方法中执行查询(通过调用服务)?此外,由于存在不同的资源(用户可以操作的图像和一些其他实体),这是否意味着我必须为每个资源定义一个?最后,如果您碰巧有一个关于实现的资源,那将是非常棒的。这将成为更好的spring安全入门。