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

时间:2016-06-06 12:20:10

标签: sling jackrabbit

如何在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)

2 个答案:

答案 0 :(得分:3)

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

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

找到

答案 1 :(得分:1)

不确定这是否可以通过邮件请求: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 doc:

  

为指定的userID创建新的系统用户。新的可授权要求具有以下特征:

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

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

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