handle句柄就是Identifiers标识符,标识符的全网唯一性是cordra的关键。数据对象在本地cordra服务生成后,如果需要让其他项目系统或外部访问该数据资源,则还需要通过handle服务把本地对象的句柄(标识符)通报出去;本文就是帮助了解这个通报过程有哪些配置项可以自定义以生成特定的handle records(句柄记录),文末给出了整个操作的实操流程例子。

IRP接口

IRP即 Identifier/Resolution Protocol标识符解析协议接口。
Cordra通过接口请求Handle服务可以对标识符进行解析。要启用此功能,需要确保Cordra设计对象中handleServerConfig部分的启用标志设置为true(默认情况下为true)。另外根据需要设置listenAddress(访问地址)、tcpPort(访问端口)、externalAddress(外部访问地址)和externalTcpPort(外部访问端口)后便可以通过访问URL连接到IRP接口。若将LogAccess配置项设置为true,就可以获取IRP请求的访问日志。上述参数配置支持动态修改。

IRP请求需要一个公-私密钥对来标识客户端的请求者。首次启用IRP接口时会创建新的密钥对,密钥文件handlePrivateKey.bin和handlePublicKey.bin生成在data目录下。

为了使Cordra返回有用的句柄记录,应该在设计对象上设置句柄生成配置Handle Minting Configuration

如果您希望将IRP接口注册到MPA(已认证的公共项目或系统),则需要站点提供的IRP接口站点信息;可通过bin目录下的hdl getsiteinfo脚本获取。
image.png

Handle服务

有些情况下,Cordra自身提供的Handle服务IRP接口因为安全等原因自行禁用了,则需要借助独立的Handle服务进行句柄的处理,下面说明下如何使用独立的Handle服务。
首先需要先下载handle服务包并安装(Linux)。handle服务通过一个句柄密钥对进行权限控制。你可以使用在Handle服务安装期间生成的管理密钥(admpub.bin和admpriv.bin);也可以使用自带的Handle工具生成一组新的密钥,运行以下脚本以生成新密钥文件privatekey和publickey(在Cordra的bin目录下也有hdl-keygen脚本):

  1. ./bin/hdl-keygen privatekey publickey

将生成的密钥文件复制到Cordra的data目录下,并确保它们被命名为privatekey和publickey。然后,在handle服务器上创建一个admin句柄记录,在HS_PUBKEY填入Cordra公钥字符串。当Cordra请求handle服务器时,该句柄记录将用作管理员身份。
配置handleMintingConfig时,将handleAdminIdentity设置为创建的Cordra管理的索引和句柄。还需要在handleMintingConfig上设置baseUri或javascript,本篇章后续内容会详述,然后保存设计对象。
Cordra将自动向外部handle服务器注册数字对象的句柄记录Handle Records。要更新现有数字对象相关的Handle Records,可在UI页面从菜单中选择admin->handle records,F12可查看后台访问方式;然后单击update All Handles按钮。

Handle服务存储

当Cordra软件不提供内置IRP接口时,则还需要配置此选项。根据此选项,您可以配置外部句柄服务器并使用Cordra作为其存储。与上一段一样,您可以使用此处所述的说明设置外部Handle服务。然后在handle服务器上安装cordra-client-handle-storage,包括cordra发行版。安装说明在cordra-client-handle-storage存储目录的README.txt文件中。

Handle Minting Configuration-句柄生成配置

这个配置项配置identifiers标识符和handle records句柄记录的生成策略。标识符生成策略是cordra服务里配置的,handle records是handle服务根据标识符生成策略以及自定义的baseUri和脚本而返回的。通过配置实现了定制的handle records的生成。
image.png

prefix属性提供Cordra在生成标识符时使用的默认前缀。如果使用Generate-Object-Id-Hook钩子指定了标识符生成策略,或者调用Cordra Api新建数据对象时都会在代码中设置其标识符,那么这个前缀将不起作用。

omitDoipServiceHandleValue属性为true时会使得Cordra不返回DOIPClient的相关信息,这些信息是方便DOIP接口自动定位查找数据对象用的。

其他属性指定handle records的生成策略。为了让Cordra在IRP解析期间生成handle records,必须设置baseUri或javascript属性。以管理员身份登录后,所有这些属性都可以通过UI界面使用:从菜单中选择“Admin”->“Handle Records”访问页面以设置这两个值。
image.png
Handle服务会返回数据对象代理访问地址,baseUri会作为这个地址的基础部分。Handle Minting Configuration配置项defaultLinks配合baseUri使用,可以配置handle records指向的具体资源对象。
defaultLinks可选项包括json、ui、payload、url,每个选项可以设置primary:true,handle服务返回的重定向路径会随机选取一个primary资源项跳转,可以使用查询参数locatt=view:访问非主链接,其中是json、ui、payload的名称或url的json指针。

javascript是创建句柄值的钩子脚本。这里有一个例子。您可以使用这个钩子来返回所需的句柄记录,而不仅仅是返回url。

  1. exports.createHandleValues = createHandleValues;
  2. function createHandleValues(object) {
  3. var handleValues = [];
  4. var dataValue = {
  5. index: 500,
  6. type: 'CORDRA_OBJECT',
  7. timestamp: new Date(object.metadata.modifiedOn).toISOString(),
  8. data: {
  9. format: 'string',
  10. value: JSON.stringify(object.content)
  11. }
  12. };
  13. handleValues.push(dataValue);
  14. return handleValues;
  15. };

下面是一个Handle Minting Configuration配置用例(结合UI的2个页面);如果defaultLinks为空,Cordra将默认配置一个primary的ui项和非primary的json项。

  1. {
  2. "prefix": "20.500.123",
  3. "baseUri": "http://localhost:8080/",
  4. "defaultLinks": [
  5. {
  6. "type": "json",
  7. "primary": false
  8. },
  9. {
  10. "type": "ui",
  11. "primary": false
  12. },
  13. {
  14. "type": "payload",
  15. "specific": "file",
  16. "primary": true
  17. },
  18. {
  19. "type": "url",
  20. "specific": "/url",
  21. "primary": false
  22. }
  23. ]
  24. }

流程实操用例