当前位置: 首页 > 知识库问答 >
问题:

如何从 SAML 响应中读取多个属性值?

龙默
2023-03-14

我正在使用Keycloak SAML,SpringBoot (Java ),并且我得到了一个包含用户所在组的响应,所以我在SAML响应中有这个属性:

<saml:Attribute Name="member" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
    <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">/ANOTHER_TEST_GROUP</saml:AttributeValue>
    <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">/TEST_GROUP</saml:AttributeValue>
   </saml:Attribute>

属性名是member,他有2个值“/other_TEST_GROUP”和“TEST_ GROUP”,但在我的代码中,当我尝试获得这样的“member”值时(data.getName()返回“member”):

model.addAttribute(data.getName(), credential.getAttributeAsString(data.getName()));

它只得到第一个值,在这种情况下是“/ANOTHER_TEST_GROUP”,我希望得到值列表。

此外,我试图像这样获取每个单独的值:

import from org.opensaml.xml.XMLObject
    XMLObject value1 = data.getAttributeValues().get(0);
    XMLObject value2 = data.getAttributeValues().get(1);

但是在< code>get(index)方法之后,没有任何有用的方法来获取它所包含的值

共有1个答案

宿景曜
2023-03-14

我这样设法得到了我所需要的(记住<code>data.getName()</code>返回成员):

String[] values = credential.getAttributeAsStringArray(data.getName());
System.out.println(values[0]); // prints /ANOTHER_TEST_GROUP
System.out.println(values[1]); // prints /TEST_GROUP

不过,如果有人知道其他方法,我会把帖子公开

 类似资料:
  • 我创建了一个反向代理,如下所示: 并从main调用它: 它在客户端可以正常工作,但是我想阅读代理的响应,我怎么做?

  • 我们正在从1.3.0升级Spring引导版本。发布到2.3.12。释放。根据旧版本,yml文件使用以下代码片段读取 在src/main/Resources/config/中配置文件 myconf源中的内容。yml 相应的测试类 更改到新版本后,它会抛出一个错误。 如果我删除属性,spring将如何知道类MyConfigProperties必须读取MyConfigSource。yml 另外,在运行测

  • 我收到了以下回复:HTTP/1.1 200确定日期:2016年4月11日星期一10:36:10 GMT内容处置:附件;filename=结果。xml;x-xss-防护:1;mode=access Keep Alive:timeout=5,max=100我想从头文件中读取文件名,如何使用正则表达式捕获这个值?

  • 问题内容: 我正在用弹簧。我需要从属性文件中读取值。这是内部属性文件,而不是外部属性文件。属性文件可以如下。 我需要以传统方式从属性文件中读取这些值。如何实现呢?Spring 3.0是否有最新方法? 问题答案: 在你的上下文中配置PropertyPlaceholder: 然后,你引用bean中的属性: 编辑:更新了代码以使用逗号分隔的多个值来解析属性: 如果那不起作用,则可以定义一个带有属性的be

  • 问题内容: 我有两个Python脚本。一种使用Urllib2库,另一种使用Requests库。 我发现请求更容易实现,但是找不到urlib2的等效函数。例如: 建立完发布网址后,请给我内容-我正尝试连接到vcloud Director api实例,并且响应显示了我有权访问的端点。但是,如果我按以下方式使用请求库.... .... the和不返回任何内容,即使请求后调用中的状态代码等于200。 为什

  • 问题内容: 我正在使用RestTemplate.postForObject将信息发布到Web服务。除了结果字符串,我还需要响应头中的信息。有什么办法可以做到这一点? 问题答案: 好吧,我终于明白了。交换方法正是我所需要的。它返回包含完整标头的HttpEntity。