【问题标题】:Create a node from within JSP using Sling API [closed]使用 Sling API 从 JSP 中创建节点 [关闭]
【发布时间】:2014-12-23 15:37:33
【问题描述】:

我刚刚开始使用 Sling Launchpad,已经掌握了选择器等基本概念,并且能够阅读节点的内容。但是,我不知道如何创建一个新节点。

我的 jackrabbit 存储库中有一个 JSP,当我使用 Web 浏览器访问它时,它正在正确处理。

我希望执行一个操作,在页面加载时在 /content/myappname 树中创建一个新节点。

我该怎么做呢?我想我需要在我的代码中创建一个 Session 对象并记录 Session 是作为管理员用户,然后执行节点创建。我只是不确定在该范围内可用的对象中使用哪些对象。

谁能提供一个快速的代码示例,说明如何从 JSP 中创建节点?

【问题讨论】:

    标签: java aem jackrabbit sling


    【解决方案1】:

    您可以通过 SlingRepsitory 对象获取一个 admin## 会话。在会话中,您可以使用 jack rabbit api 创建节点。

    <sling:defineObjects> 标签暴露了 sling 变量(你可以包括global.jsp,它暴露了所有这些变量)。 Sling的getService()方法可以用来获取SlingRepository的实例。

    org.apache.sling.jcr.api.SlingRepository repos = sling.getService(SlingRepository.class);
    javax.jcr.Session session = repos.loginAdministrative(null);
    javax.jcr.Node root = session.getRootNode();
    javax.jcr.Node newNode = root.addNode('content/myappname/newnode');
    

    ##管理会话旨在用于提供一般服务的捆绑包中,必须谨慎使用,并且仅在absolutely necessary 时使用。它的缺点在互联网上有很好的记录,有alternatives。如果可能,最好从具有用户特定权限的请求中获取会话

    【讨论】:

    • 使用 loginAdministrative 在安全方面是危险的,只有在没有其他方法的情况下才应该使用。在处理 Sling 请求的 JSP 脚本中,您可以使用 Resource.adaptTo(Node.class) 方法获取 JCR 节点,如果当前资源来自 JCR 存储库,则该方法返回 JCR 节点。然后,您可以使用 Node.getSession() 获取具有当前请求凭据并且不会像 loginAdministrative 那样提升权限的 Session。
    猜你喜欢
    • 2023-04-01
    • 2015-10-07
    • 2018-03-24
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多