【问题标题】:How to create system user in Sling?如何在 Sling 中创建系统用户?
【发布时间】:2016-10-06 01:19:10
【问题描述】:

如何在 Sling 中创建系统用户?

我尝试搜索,但我发现的所有内容都与我不使用的 AEM 有关。是否可以使用 Jackrabbit API 或 Sling Initial Content(描述符文件)创建用户?

我尝试执行以下操作:

curl -u admin:admin -F:name=myuser -Fpwd=mypwd -FpwdConfirm=mypwd -Frep:principalName=myuser -Fjcr:primaryType=rep:SystemUser http://localhost:8080/home/users/system/*

但是有一个错误:

*ERROR* [127.0.0.1 [1465215465364] POST /home/users/system/* HTTP/1.1] org.apache.sling.servlets.post.impl.operations.ModifyOperation Exception during response processing.
javax.jcr.nodetype.ConstraintViolationException: Property is protected: rep:principalName = myuser
    at org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.setProperty(NodeDelegate.java:525)
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1358)
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1346)
    at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:209)
    at org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112)
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl.internalSetProperty(NodeImpl.java:1346)
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl.setProperty(NodeImpl.java:432)
    at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.store(SlingPropertyValueHandler.java:592)

【问题讨论】:

    标签: sling jackrabbit


    【解决方案1】:

    有一个基于 Sling 和 Jackrabbit Oak 的开箱即用解决方案。它具有用于设置用户和 ACL 的基于文本的 DSL,例如:

    create service user bob,alice
    
    set ACL on /libs,/apps
        remove * for alice
        allow jcr:read for bob
    end
    

    还可以将这些说明嵌入到用于构建 Sling 启动板的配置模型中 - 假设您使用的是 slingstart-maven-plugin

    完整的文档可以在Repository Initializers and Repository Initialization Language找到

    【讨论】:

    • 将密切关注这一点。我有一个用例,这周我正在这样做,但使用的是 jackrabbit 的 AccessControlUtils。我的工作正常,但能够写出一组命令将是一个有趣的解决方案。
    • 我看到解决方案已经发布了,太好了。 @bstockwell,您可能对此感兴趣。
    【解决方案2】:

    不确定这是否可以通过每个帖子请求:https://mail-archives.apache.org/mod_mbox/sling-users/201512.mbox/%3CCAFMYLMb9Wiy+DYmacc5oT7YRWT1hth8j1XAAo_sKT8uq9HoFNw@mail.gmail.com%3E

    建议的解决方案是使用 jackrabbit api 来执行此操作。这看起来像:

    //get a user manager
    
    try {
        User systemUser = userManager.createSystemUser("myuser", "/home/users/system");
    } catch (Exception e) {
         log.error("Error adding user",e);
         throw e;
    }
    
    //commit changes
    

    请务必注意,这不允许您为此用户设置密码,也不能使用 user.changePassword() 设置密码——当我尝试时出现错误:

    javax.jcr.UnsupportedRepositoryOperationException: system user
    

    来自 java 文档:

    为指定的用户 ID 创建一个新的系统用户。新的Authorizable需要具备以下特征:

    • User.isSystemUser() 返回 true。
    • 系统用户未设置密码,不允许更改密码。

    http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/core/security/user/UserManagerImpl.html

    这是我的整个激活器类:https://gist.github.com/scrupulo/61b574c9aa1838da37d456012af5dd50

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 2022-10-24
      • 2011-05-12
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2016-07-21
      相关资源
      最近更新 更多