【问题标题】:Create New AEM User in adobe CQ with user rights in Java Code在 adobe CQ 中使用 Java 代码中的用户权限创建新 AEM 用户
【发布时间】:2015-09-07 10:05:44
【问题描述】:

如何在 java 代码中创建具有用户权限的新 adobe aem 用户。

使用 SlingAllMethodsServlet,您可以从发布请求中获取参数。

您可以使用给定的信息创建用户。用户将被添加到具有您授予他的权限的 CQ 服务器中。

   username = request.getParameter("username");
    password = request.getParameter("password");
    givenname = request.getParameter("givenname");
    name = request.getParameter("name");
    email = request.getParameter("email");

    ResourceResolver resourceResolver = request.getResourceResolver();

    Session session = resourceResolver.adaptTo(Session.class);

    UserManager userManager = resourceResolver.adaptTo(UserManager.class);
    User u = null;
    try {
        //check if user does exist, easy check with username, username is id in cq
        u = (User) userManager.getAuthorizable(username);
    } catch (RepositoryException e) {
        logger.error("User cannot be checked: " + e.getMessage());
        e.printStackTrace();
    }

    if(u != null) {
        logger.error("User"  + username + " exists already in CQ!! Can't create user again!");
        try {
            json.put("error", "User already exists");
            response.setStatus(HttpServletResponse.SC_CONFLICT);
        } catch (JSONException e) {
            logger.error(e.getMessage());

        }
    }else {
        /*Just create user if it does not exist*/
        try {

            user = userManager.createUser(username, password);
            ValueFactory valueFactory = session.getValueFactory();
            emailValue = valueFactory.createValue(email);
            givennameValue = valueFactory.createValue(givenname);
            nameValue = valueFactory.createValue(name);

            //User class just accepts Value Object
           user.setProperty("profile/" + UserProperties.EMAIL, emailValue);
           user.setProperty("profile/" + UserProperties.FAMILY_NAME,nameValue);
           user.setProperty("profile/" + UserProperties.GIVEN_NAME, nameValue);



        } catch (RepositoryException e) {
            logger.error("Failed while creating user: " + e.getMessage());
        }


        try {
            /* add Group to user */
            Group g = (Group) userManager.getAuthorizable(GROUP_NAME);
            g.addMember(user);

            session.save();
            session.logout();


        } catch (RepositoryException e) {
            logger.error("Can't add group to new created User : " + username  + e.getMessage());

        }

【问题讨论】:

  • 你问什么问题?
  • 这是一个创建用户的解决方案。只是想帮助其他用户。因为这里没有写怎么做。
  • 这可能有助于将来提出问题,然后单独回答/解决它,以便人们可以将帖子识别为答案而不是问题。感谢您分享您的示例!

标签: adobe aem sling


【解决方案1】:

如何获取CQ admin Session / 如何获取CQ admin UserManager

如果您无法使用会话和用户管理器保存用户,那么您必须获取管理员会话。

  1. 为 AccessControlUtil 添加依赖(检查版本)

  2. 将 SlingRepository 变量添加为 @Reference

  3. 以管理员身份登录以获取管理员会话(参数必须为 null,或管理员用户,而不是您必须创建 SimpleCredentials(Name, password.asChar)
  4. 使用 AccessControlUtil 和管理会话获取用户管理器

    @Reference
    private SlingRepository repository;
    
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
    
        try {
            Session adminSession = repository.loginAdministrative(null);
    
            UserManager usermanager = AccessControlUtil.getUserManager(adminSession);
            //your stuff like manipulating user, get authorizab   
    
            adminSession.save();
    
        } catch (RepositoryException e) {
           e.printStackTrace();
        }
    }
    

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2014-10-22
    • 2016-05-06
    • 2014-07-24
    • 1970-01-01
    • 2020-12-08
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多