首页 > 解决方案 > 使用 Java 解析和检索 Policy Server 响应的有效方法

问题描述

我有一个策略服务器,我在其中创建资源和角色。资源由基于角色定义的策略指导。例如。假设我们有以下资源button1、button2、Submit、table2和角色,如Google:NA:Admin、Yahoo:CHN:Admin、Google:CHN:User、Alphabet:EU:Admin等。用户将注册一个通过提供用户名和密码登录到 Policy Server 站点来扮演角色。我正在从服务器获取每个用户的授权资源列表。对于用户名“greenUser”(作为 POST 请求的一部分发送到 Policy Server API 的唯一参数),来自服务器的响应将如下所示。

{"permit":[
  "button1",
  "table2",
  "Role:Google:NA:Admin",
  "Submit"
]
}

要求是确定用户的角色、地区、公司和他有权访问的资源列表。因此,我在“角色”的同一名称上创建了一个资源,并限制了该特定角色在 Policy Server 中的访问。例如:我创建了一个角色"Google:NA:Admin"并创建了一个策略来限制只能访问角色"Role:Google:NA:Admin"。目的是找到此资源作为响应的一部分,并确定用户所拥有的角色。用户有可能拥有多个角色。例如。他可以成为 Google(北美地区)和 Alphabet(欧盟地区)的管理员。

从角色中确定地区和公司。我创建了一个如下所示的 JSON:

{
"Roles" : [{
"Google" : [{
"NA" : ["Role:Google:NA:Admin", "Role:Google:NA:User"]},{
"CHN" : ["Role:Google:CHN:Admin", "Role:Google:CHN:User"]}
]
},
{
"Alphabet" : [{
"NA" : ["Role:Alphabet:NA:Admin", "Role:Alphabet:NA:User"]},{
"CHN" : ["Role:Alphabet:CHN:Admin", "Role:Alphabet:CHN:User"]}
]
}
}

我创建了一个使用 Java 解析整个 JSON 的方法,如果该值与返回的特定“角色”资源匹配,那么我将捕获键(例如:CHN)作为区域和外部 JSON 元素的键为“公司”。

我想检查是否有更好的方法来确定用户的角色、地区和公司。上面提到的 JSON 是我的想法。我很想听听除 JSON 之外是否有更好的设计或方法。示例代码片段表示赞赏。

对不起,很长的帖子。我尽力捕捉完整的需求。提前致谢。

标签: javajsonspringpostpolicy-server

解决方案


如果策略服务器有一个 API 可以为给定的用户获取角色,我会使用它或创建一个(如果可能的话)。如果所有门都关闭,添加角色作为资源将是我的最后一个计划。

不清楚哪个系统生成 company-country-roles JSON。是策略服务器还是您的应用程序?如果是策略服务器,我将返回策略名称数组(getRoles API)。如果您的应用程序要返回此 JSON,我将与应用程序服务的使用者讨论它并确定它是否符合他们的期望。如果没有消费者,我只会返回角色名称数组以保持简单


推荐阅读