使用自定义webscript修改Alfresco中的审计跟踪

时间:2018-01-24 10:33:50

标签: java alfresco

我正在编写一个自定义Java webscript,它接受文档noderef和外部用户名(字符串值)作为参数。我启用了审核,审核日志显示了在调用webscript时对文档的访问。现在我想知道是否可以修改审计跟踪,这样当它显示该特定文档的日志时,它还会显示外部用户的名称。

webscript url:http://localhost:8080/alfresco/service/node/{noderef}/user/{user}

在调用它时,我在日志中得到以下输出:

Extracted audit data: 
    Application:    AuditApplication[ name=alfresco-access, id=1, disabledPathsId=2]
    Values:         
        /alfresco-access/transaction/sub-actions=readContent
        /alfresco-access/transaction/action=READ
        /alfresco-access/transaction/node=workspace://SpacesStore/c21db432-4ad6-4af2-8bcf-78bc89724afe
        /alfresco-access/transaction/type=cm:content
        /alfresco-access/transaction/path=/app:company_home/app:shared/cm:audit-services-context.xml
        /alfresco-access/transaction/user=admin

    New Data: 
        /alfresco-access/transaction/sub-actions=readContent
        /alfresco-access/transaction/action=READ
        /alfresco-access/transaction/type=cm:content
        /alfresco-access/transaction/user=admin
        /alfresco-access/transaction/path=/app:company_home/app:shared/cm:audit-services-context.xml

我想将{user}也存储在审计跟踪中。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用private Recordset readExcelData() { Recordset rs; try { //some logic here } catch (Exception e) { e.printStackTrace(); } return rs; } 。我认为这应该对你有帮助。但我没有测试过这个。

答案 1 :(得分:0)

您可能不希望这样做,至少不是以您描述的方式,而是没有采取额外的安全预防措施。

这符合IMHO对安全标准的意见,如果管理员需要阅读文档,则需要使用其用户名记录操作,如果普通用户需要访问文档,则需要对该操作进行适当的身份验证。 / p>

从我所拥有的小环境来看,我会说这实际上是与其他一些不与Alfresco共享SSO的应用程序的集成。所以我建议使用以下解决方案:

  • 在Alfresco和您的应用程序之间使用适当的SSO,让相关用户在Alfresco中ping正确的端点并让SSO为您正确验证请求。

  • 使用共享密钥(类似于共享密码来编码请求中的权限名称+正确的身份验证子系统或请求过滤器来处理)或密钥对(类似于solr和alfresco之间的securecomms)到能够安全地将权限信息传递给请求

  • 使用系统帐户(最好不是管理员,但专用于此用例/应用程序集成的帐户)为相关用户生成有效的alf_ticket,并让您的应用程序将该票证附加到请求。 (当然,在运行代码片段以从runAsSystem块获取alf_ticket之前,您的"模拟" webscript需要检查正确的系统/集成用户名。在这种情况下,我还建议不要使用管理员帐户,而是使用没有权限的用户,除了这个用例。

如果您要选择快速实施,我建议至少提供以下内容:

  • 您需要确保没有任何用户可以ping该webscript,并且只有管理员/系统用户才能真正访问该webscript。

  • 您可能应该在审计跟踪中记录整个模拟操作(使用相同的审计条目或单独的审计条目),这样就可以清楚地知道这实际上是代表用户而不是用户自己直接

  • 如果您使用有问题的webscript除了阅读节点的内容之外的其他任何内容(如果您的onReadContent行为也有一些令人讨厌的AuthenticationUtil.setFullyAuthenticatedUser,也可以是这种情况)要求将操作记录为系统/最初经过身份验证的用户,您可能很难做到这一点......您应该切换到更强大的方法!