Hello All,
I am trying to get the current user that is logged in by using Jackrabbit, and based on that information have a page redirect to a new page. I was using this tutorial as a starting point http://helpx.adobe.com/experience-manager/using/developing-aem-osgi-bundles-jackrabbit.html.
I was able to get the bundle to work, so I began to edit the code to get the current user that is logged in. However, it keeps returning that the admin user is logged in, even when I log out and log in with another user.
Here is the code that I am using:
package com.aem.users; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.StringWriter; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javax.jcr.Repository; import javax.jcr.SimpleCredentials; import javax.jcr.Node; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.jackrabbit.commons.JcrUtils; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Service; import javax.jcr.RepositoryException; import org.apache.felix.scr.annotations.Reference; import org.apache.jackrabbit.commons.JcrUtils; import javax.jcr.Session; import javax.jcr.Node; //Sling Imports import org.apache.sling.api.resource.ResourceResolverFactory ; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.Resource; //Jackrabbit User APIs import org.apache.jackrabbit.api.JackrabbitSession ; import org.apache.jackrabbit.api.security.user.Group; import org.apache.jackrabbit.api.security.user.UserManager ; import org.apache.jackrabbit.api.security.user.User; import org.apache.jackrabbit.api.security.user.Authorizable ; //This is a component so it can provide or consume services @Component @Service public class SearchUser2Impl implements SearchUsers2 { /** Default log. */ protected final Logger log = LoggerFactory.getLogger(this.getClass()); private Session session; private java.util.Iterator<Authorizable> users = null ; //Inject a Sling ResourceResolverFactory @Reference private ResourceResolverFactory resolverFactory; @Override public int getCQUsers2() { try { int num = 0; //Invoke the adaptTo method to create a Session ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null); session = resourceResolver.adaptTo(Session.class); //Create a UserManager instance from the session object UserManager userManager = resourceResolver.adaptTo(UserManager.class); /* to get the current user */ Authorizable auth = userManager.getAuthorizable(session.getUserID()); String us = auth.getID(); log.info(us); /* to get the groups it is member of */ Iterator<Group> groups = auth.memberOf(); while (groups.hasNext()) { Group g = groups.next(); String id2 = g.getID(); if(id2.equalsIgnoreCase("nbadmin")){ log.info("User is in admin group"); num = 1; }else if(id2.equalsIgnoreCase("nbuser")){ log.info("User is in user group"); num = 2; }else { log.info("User is not in either group"); } log.info("User belongs to: "+id2); } // Log out session.logout(); return num ; } catch(Exception e) { log.info("CQ ERROR: "+e.getMessage()) ; } return 0; } }
In the code, I am returning an integer based on what group a user is in, and then using that integer to redirect to a new page.
If anyone could provide any help, or point me in the right direction it would be greatly appreciated.
Solved! Go to Solution.
Views
Replies
Total Likes
When you edited your code - you used:
ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
session = resourceResolver.adaptTo(Session.class);
//Create a UserManager instance from the session object
UserManager userManager = resourceResolver.adaptTo(UserManager.class);
/* to get the current user */
Authorizable auth = userManager.getAuthorizable(session.getUserID());
This will always return admin because ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null) returns admin. If you want to log in as another user - you should use:
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");
ResourceResolver resolver = null;
try {
//Invoke the adaptTo method to create a Session used to create a QueryManager
resolver = resolverFactory.getServiceResourceResolver(param);
session = resolver.adaptTo(Session.class);
To learn how to use the getServiceResourceResolver() method to log in as another AEM user - see this article:
http://helpx.adobe.com/experience-manager/using/querying-experience-manager-sling.html
Views
Replies
Total Likes
When you edited your code - you used:
ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
session = resourceResolver.adaptTo(Session.class);
//Create a UserManager instance from the session object
UserManager userManager = resourceResolver.adaptTo(UserManager.class);
/* to get the current user */
Authorizable auth = userManager.getAuthorizable(session.getUserID());
This will always return admin because ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null) returns admin. If you want to log in as another user - you should use:
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");
ResourceResolver resolver = null;
try {
//Invoke the adaptTo method to create a Session used to create a QueryManager
resolver = resolverFactory.getServiceResourceResolver(param);
session = resolver.adaptTo(Session.class);
To learn how to use the getServiceResourceResolver() method to log in as another AEM user - see this article:
http://helpx.adobe.com/experience-manager/using/querying-experience-manager-sling.html
Views
Replies
Total Likes
Thank you for the quick reply. I will give that code a try and look into that article.
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies