使用 Java 代码中的用户权限在 adobe CQ 中创建新的 AEM 用户

Create New AEM User in adobe CQ with user rights in Java Code

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

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

然后您可以使用给定的信息创建用户。用户将被添加到 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());

        }

如何获取CQ管理员会话/如何获取CQ管理员UserManager

如果你不能用session和usermanager保存用户,那么你必须得到admin Session。

  1. 添加AccessControlUtil的依赖(查看版本)

  2. 添加 SlingRepository 变量作为@Reference

  3. 以管理员身份登录以获取管理会话(参数必须为空,或者是管理员用户,而不是创建 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();
        }
    }