快速业务通道

使用Java验证Lotus Forms XML数字签名 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
{    HashMap copiedNamespaces = new HashMap();    Node node = src;    while (node != null && node.getNodeType() ==  Node.ELEMENT_NODE) {      NamedNodeMap attributes = node.getAttributes();      for (int i = 0; i < attributes.getLength(); i++)  {        Attr attr = (Attr) attributes.item(i);        String namespaceUri = attr.getNamespaceURI();        if (!XML_NS_URI.equals(namespaceUri)) {          // a normal attribute, don''t copy it           continue;        }        String nodeValue = attr.getNodeValue();        String localName = attr.getLocalName();        String prefix = attr.getPrefix();        String qualifiedName = (prefix == null) ?  localName : prefix            + ":" + localName; //$NON-NLS-1$        // don''t overwrite namespace already copied.        if (copiedNamespaces.containsKey(qualifiedName)) {          continue;        }        Document factory = target.getOwnerDocument();        Attr newAttr = factory.createAttributeNS (namespaceUri,            qualifiedName);        newAttr.setNodeValue(nodeValue);        target.setAttributeNodeNS(newAttr);        copiedNamespaces.put(qualifiedName, nodeValue);      }      node = node.getParentNode();    } }

使用Java验证Lotus Forms XML数字签名(4)

时间:2011-05-15 IBM Eric Fu

定制 URI dereferencer

由于 XForms 处理模型要求将包含签名的实例数据从源表单文档(本例中为 XFDL 文档)中单独实例化,因此带有 URI="" 的引用(相同的文档引用)表示对 实例文档的开始部分的引用,而不是完整的 XFDL 文档。我们希望能够对整个 XFDL 文档进行签名,而不是仅仅是数据,从而在签名双方创建安全的协议和合约 。

标准 XML 签名允许一个特殊的 Reference:不带有 URI 属性 Reference。 XML 签名规范将其定义为接收方应用程序应当能够识别在这种情况下应当使用的 对象。在 Lotus Forms 中,未包含 URI 的 Reference 表示整个 XFDL 文档。因 此,需要一个定制 dereferencer 来知道如何从各种引用的 URI 中获取所有被引 用数据(包括不带 URI 的引用)。这种定制 dereferencer 实现了 javax.xml.crypto.URIDereferencer 并且被称为 NoUriDereferencer。

NoUriDereferencer 使用委托(delegation)模式构建。在取消引用期间,如 果 URIReference 对象的 URI 属性为 null,那么表单文档被作为八位字节流 (octet stream)返回(尽管返回 XML 文档节点集会更加有效,要实现除相同文 档引用以外的引用,javax.xml.crypto.URIDereference> 文档必须使用八位 字节流)。对于所有其他 URI,类将委托由标准 JSR 105 实现提供的最初的默认 dereferencer。

清单 4. Dereferencer 代码

public static class  NoUriDereferencer implements URIDereferencer {    private InputStream inputStream;    public NoUriDereferencer(InputStream inputStream) throws  IOException    {      this.inputStream = inputStream;    }    public Data dereference(URIReference uriReference,  XMLCryptoContext context)     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号