While creating user programatically in AEM it is giving javax.jcr.AccessDeniedException: Access denied. | Community
Skip to main content
MandaPavanKumar
January 19, 2023
Solved

While creating user programatically in AEM it is giving javax.jcr.AccessDeniedException: Access denied.

  • January 19, 2023
  • 5 replies
  • 2954 views

Hi All,

    Can anyone please help me when I am craeting the user programatically it is giving me the javax.jcr.AccessDeniedException: Access denied.

 

Thanks,

Pavan

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Nitin_laad

Hi @mandapavankumar you can try below sample code, assuming system user is having all required permission in publish environment - 

@Activate public void createLocalUser() { try { Map<String, Object> param = new HashMap<>(); param.put(ResourceResolverFactory.SUBSERVICE, "system-user"); ResourceResolver resolver = resolverFactory.getServiceResourceResolver(param); UserManager userManager = resolver.adaptTo(UserManager.class); Authorizable user = userManager.createUser("newlocaluser", "password"); user.setProperty("firstName", "test"); user.setProperty("lastName", "user"); user.addGroup("group1"); userManager.updateUser(user); LOG.info("Local user newlocaluser created successfully."); resolver.close(); } catch (LoginException | RepositoryException e) { LOG.error("Error creating local user: {}", e.getMessage()); }

 

5 replies

Umesh_Thakur
Community Advisor
Community Advisor
January 19, 2023

did you check the permission of the system user, you are using to save the user node.?

Please verify that.

MandaPavanKumar
January 19, 2023

Yes I ahve verified the permissions to the system user and that user is having enough permissions to create user

 

Siva_Sogalapalli
Community Advisor
Community Advisor
January 19, 2023

Below is the sample code to create user:

Map<String, Object> param = new HashMap<String, Object>();

param.put(ResourceResolverFactory.SUBSERVICE, "service-userid");

ResourceResolver resolver = resourceFact.getServiceResourceResolver(param);

org.apache.jackrabbit.api.security.user.UserManager userManager = resolver.adaptTo(org.apache.jackrabbit.api.security.user.UserManager.class);
if(userManager == null)
{
log.error("userManager == null!");
return;
}else {
String username = "mytestuser";
String password = "password";
org.apache.jackrabbit.api.security.user.User user = userManager.createUser(username, password);
}

 

Note: please make sure system user has permissions to create user. 

MandaPavanKumar
January 19, 2023

Hi Siva,

      Can you please correct me that in this line the login is reffering to username right.

 org.apache.jackrabbit.api.security.user.User user = userManager.createUser(login, password);

Thanks,

Pavan

Siva_Sogalapalli
Community Advisor
Community Advisor
January 19, 2023

yes, you're right, it was typo mistake, corrected it. 

 

Kiran_Vedantam
Community Advisor
Community Advisor
January 19, 2023

Hi @mandapavankumar 

 

Please check similar query with the solution here:: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/programmatic-user-creation-in-aem/m-p/191683

 

Hope this helps!


Thanks,
Kiran Vedantam.

MandaPavanKumar
January 20, 2023

I followed the same implementation still it is showing access denied

Nitin_laad
Community Advisor
Nitin_laadCommunity AdvisorAccepted solution
Community Advisor
January 20, 2023

Hi @mandapavankumar you can try below sample code, assuming system user is having all required permission in publish environment - 

@Activate public void createLocalUser() { try { Map<String, Object> param = new HashMap<>(); param.put(ResourceResolverFactory.SUBSERVICE, "system-user"); ResourceResolver resolver = resolverFactory.getServiceResourceResolver(param); UserManager userManager = resolver.adaptTo(UserManager.class); Authorizable user = userManager.createUser("newlocaluser", "password"); user.setProperty("firstName", "test"); user.setProperty("lastName", "user"); user.addGroup("group1"); userManager.updateUser(user); LOG.info("Local user newlocaluser created successfully."); resolver.close(); } catch (LoginException | RepositoryException e) { LOG.error("Error creating local user: {}", e.getMessage()); }

 

MandaPavanKumar
January 23, 2023

Hi Nitin,

     Let me try it and will you know if I face any issue.

Thanks,

Pavan

Shivam153
January 23, 2023

You can use repository initialization concept here.

https://sling.apache.org/documentation/bundles/repository-initialization.html

 

Hope it will work!

Thanks!

MandaPavanKumar
January 24, 2023

Hi Shivam,

     Correct me if I am wrong that when the site was published at dispatcher level. And now if we try to create the user at AEM end is it possible ? can you please hlpe me on this.

Thanks,

Pavan