Создать нового пользователя AEM в Adobe CQ с правами пользователя в коде Java
Как создать нового пользователя Adobe AEM с правами пользователя в коде Java.
С SlingAllMethodsServlet вы можете получить параметр из почтового запроса.
Чем вы можете создать пользователя с заданной информацией. Пользователь будет добавлен в CQ Server с правами, которые вы ему предоставили.
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());
}
1 ответ
Решение
Как получить сеанс администратора CQ / Как получить администратор CQ UserManager
если вы не можете сохранить пользователя, используя сеанс и usermanager, вам нужно получить сеанс администратора.
Добавьте зависимость для AccessControlUtil (проверьте версию)
добавить переменную SlingRepository как @Reference
- войдите в систему как Административный, чтобы получить сеанс администратора (параметр должен быть нулевым, или пользователь-администратор, чем вы должны сделать SimpleCredentials(Name, password.asChar)
получить Usermanager с 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(); } }