這是我的xml文檔。我只想使用xml簽名來簽署userID部分。我正在使用xpath轉換來選擇特定元素。Xpath轉換在java中不起作用
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
Version="2.0" IssueInstant="2012-05-22T13:40:52:390" ProtocolBinding="urn:oasis:na
mes:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="localhos
t:8080/consumer.jsp">
<UserID>
xyz
</UserID>
<testing>
text
</testing>
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
http://localhost:8080/saml/SProvider.jsp
</saml:Issuer>
</samlp:AuthnRequest>
我使用下面的代碼添加變換:
transformList.add(exc14nTransform);
transformList.add(fac.newTransform(Transform.XPATH, new XPathFilterParameterSpec("samlp:AuthnRequest/UserID xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"")));
但我得到以下幾點:
Original Exception was javax.xml.transform.TransformerException: Extra illegal t
okens: 'xmlns', ':', 'samlp', '=', '"urn:oasis:names:tc:SAML:2.0:protocol"'
於是,我試着刪除xmlns部分。
transformList.add(fac.newTransform(Transform.XPATH, new XPathFilterParameterSpec("samlp:AuthnRequest/UserID")));
但它簽署的整份文件,並提供了以下消息:
com.sun.org.apache.xml.internal.security.utils.CachedXPa
thFuncHereAPI fixupFunctionTable
INFO: Registering Here function
問題是什麼?
編輯
As @JörnHorstmann說這個消息只是一個日誌或類似的東西。現在的問題是,即使在給出xpath查詢之後,整個文檔被簽名而不僅僅是用戶ID。我通過在簽署文檔後更改<testing>
元素的值來證實了這一點。結果是文檔沒有得到驗證(如果它只簽署了UserID部分,則對<testing>
所做的任何更改都應產生有效簽名。)
感謝您的回覆。我嘗試過這個。非法令牌錯誤消失了。但是現在在簽署文檔後,我更改了userID值,然後嘗試驗證此更改的文檔。它得到完美驗證(它不應該發生)。我仍然開始消息:com.sun.org.apache.xml.internal.security.utils.CachedXPa thFuncHereAPI fixupFunctionTable 信息:在這裏註冊函數 – Ashwin
我試過「samlp:AuthnRequest/self :: UserID」和「samlp :AuthnRequest //自::用戶名」。它仍然簽署整個文件。 – Ashwin
請參閱編輯。 – Ashwin