gpt4 book ai didi

java - 用于身份验证的 PreInspirationAdvice

转载 作者:行者123 更新时间:2023-12-01 09:06:28 25 4
gpt4 key购买 nike

最近我一直在与 Sring Security 打交道,试图以我自己的方式对其进行定制。例如,我设法将授权逻辑引入请求的执行流程中,以判断当前用户是否有权调用某些方法。我通过在调用其 before 方法的地方注入(inject)一个 PreInitationAuthorizationAdvice 对象来完成此操作,我可以判断该过程是否应该继续。

现在我想对身份验证执行相同的操作。我想注入(inject)我的代码(以某种方式,在某个地方),我会被问到某些特定方法是否需要身份验证。我知道我可以通过调用 antMatchersregexMatchers 等在 WebSecurityConfigurerAdapter.configure 中执行此操作。但我宁愿逐案执行此操作,而不是对 URL 进行分组。

有办法做到这一点吗?

最佳答案

听起来您几乎将 ACL 视为可以在不同数据集上重用的方面,如果这是假设,我不确定它是否成立。

上次我构建了一个包含权限的大型系统,模型是这样的。

  • 您有多个用户
  • 您拥有大量资源
  • 您可以对资源执行多种操作。
  • 您可以定义定义不同权限集(操作集)的角色
  • 您有多个项目
  • 资源按项目划分范围(它们有一个projectId)
  • 在每个项目(映射)中为用户分配零个或多个角色
  • 用户对资源的访问权限取决于用户在拥有该资源的项目中的角色(这可以在运行时更改)。

如果用户U想要删除资源A,则需要查明资源A属于哪个项目,以及U的有效权限集(加入U在项目中可能拥有的所有角色)是否包含“删除资源” “有特权。

在编写 SQL/JPA 查询时,您需要在后端非常小心,因为您永远不能信任客户端。这意味着你不能POST projectId和resourceId,你总是必须从resourceId开始,看看它属于哪个项目,然后检查是否允许该操作。

如果您有“查看全部”功能,允许用户查看跨项目的所有资源,并且用户可以查看 5 个项目中的 3 个项目中的资源,则您需要向安全模型询问用户拥有以下权限的项目列表:查看具有特权的资源,然后将这些projectId 添加到查询中以加载数据。 projectIds 需要进入查询,就像排序和分页参数一样。通常您需要两个查询,因为您还需要一个计数查询来计算总页数。

根据我的经验,数据模型和 ACL 是完全交织在一起的。如果你想让 ACL 实现独立于数据模型,我担心你最终会得到一个低效的系统,需要加载太多数据,然后根据权限过滤掉资源。或者您最终会得到一个过于复杂的系统,因为您需要一种通用方法将 ACL 逻辑传输到资源加载查询中(在我描述的系统中,它们一开始并不简单)。

可能存在比我描述的更简单的系统,其中通用 ACL 实现可以工作,但不适用于我在过去 8 年中实现的企业内容。

关于java - 用于身份验证的 PreInspirationAdvice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com