gpt4 book ai didi

java - 在 Java 中从给定的 XML 创建 OpenSAML 断言

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:09 25 4
gpt4 key购买 nike

我已经为此苦苦思索了一段时间,并且开始取得进展。但是,我在将 SAML 2 断言(XML 格式)的字符串表示形式转换为断言对象时遇到了一些麻烦。

看起来我得到了一个有效的 org.w3c.dom.Document有了适当的数据,我似乎得到了一个有效的 SAMLObjectBuilder<Assertion>来自建筑工厂,但是当我尝试将它们放在一起时,我得到的只是一个空白的断言;主题、发行人、发行时间等都是null ,尽管它们显然是在 XML 中设置的。

有没有人看到我做错了什么,并可以提出解决方案?

Document doc = loadXMLFromString(saml);

XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();

SAMLObjectBuilder<Assertion> assertionBuilder =
(SAMLObjectBuilder<Assertion>)
builderFactory.getBuilder(Assertion.DEFAULT_ELEMENT_NAME);

Assertion assertion = assertionBuilder.buildObject(doc.getDocumentElement());

String nameID = assertion.getSubject().getNameID().getValue();

在 nameID 赋值处,assertion.getSubject()返回 null , 使表达式的其余部分失败。

我使用的示例是来自 sstc-saml-tech-overview-2.0-draft-03 第 10 页的完整 XML。

函数loadXMLFromString()以上大部分借自In Java, how do I parse XML as a String instead of a file?

最佳答案

如果其他人遇到同样的问题,并遇到这个问题,这里是答案。

https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML

仅以解码为例:

String inCommonMDFile = "/data/org/opensaml/saml2/metadata/InCommon-metadata.xml";

// Initialize the library
DefaultBootstrap.bootstrap();

// Get parser pool manager
BasicParserPool ppMgr = new BasicParserPool();
ppMgr.setNamespaceAware(true);

// Parse metadata file
InputStream in = MetadataTest.class.getResourceAsStream(inCommonMDFile);
Document inCommonMDDoc = ppMgr.parse(in);
Element metadataRoot = inCommonMDDoc.getDocumentElement();

// Get apropriate unmarshaller
UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();
Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(metadataRoot);

// Unmarshall using the document root element, an EntitiesDescriptor in this case
EntitiesDescriptor inCommonMD = (EntitiesDescriptor) unmarshaller.unmarshall(metadataRoot);

然后将您的 Document 实例替换为 inCommonMDDoc 并查看最终 unmarshall() 调用的结果。请注意,unmarshall() 返回一个 Object,您需要将其转换为适当的类型。提示:如果您不确定它是什么类型,您可以使用 typeof,但要注意继承。

关于java - 在 Java 中从给定的 XML 创建 OpenSAML 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4667873/

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