jcr session is returning 'anonymous' user or some else session's data

Avatar

Avatar

shivama92274331

Avatar

shivama92274331

shivama92274331

12-01-2021


Hi,

I am geting the jcr session clash/exchanged with other sessions, the logged in user details are replaced with other user's details intermittently or userid is coming as 'anonymous'. Any help for this issue? below is the code i am using in sling model class.

@Model(adaptables = { SlingHttpServletRequest.class })
public class UserLoggedInModel

@SlingObject
ResourceResolver resourceResolver;

@PostConstruct
protected void initialize()
{
String firstNamePath = "./profile/firstName";
String lastNamePath = "./profile/lastName";
try
{

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

String userId = session.getUserID(); //returns 'anonymous' userid

User user = (User)userManager.getAuthorizable(userId);

firstName = user.getProperty(firstNamePath)!=null ? user.getProperty(firstNamePath)[0].getString() : "";

lastName = user.getProperty(lastNamePath)!=null ? user.getProperty(lastNamePath)[0].getString() : "";

if(!"anonymous".equals(userId) && !"saml-anonymous-user".equals(userId))
{
isLoggedIn = true;

}
}

Accepted Solutions (0)

Answers (3)

Answers (3)

Avatar

Avatar

Anudeep_Garnepudi

Avatar

Anudeep_Garnepudi

Anudeep_Garnepudi

12-01-2021

@shivama92274331 

Try getting ResourceResolver from request object.

@Self
SlingHttpServletRequest request;

@PostConstruct
protected void initialize() {
    Session session = request.getResourceResolver().adaptTo(Session.class);
    userId = session.getUserID();
}

-AG

Avatar

Avatar

shivama92274331

Avatar

shivama92274331

shivama92274331

15-01-2021

Hi, KiranVedantam1992,

with your solution you have adapted resources class also in @adaptables{ Resource.class,
SlingHttpServletRequest.class}

For below request object is it creating from resources class or httpservletrequest class?

 

 slingRequest.getResourceResolver().adaptTo(Session.class); 

 

Thanks,

Shivam

Avatar

Avatar

KiranVedantam1992

Avatar

KiranVedantam1992

KiranVedantam1992

13-01-2021

To get the user session

slingRequest.getResourceResolver().adaptTo(Session.class);

 

Try this, it is working for me:

 

@Model(adaptables = { Resource.class,
SlingHttpServletRequest.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class UserLoggedInModel{

 

@inject
private ResourceResolver resourceResolver;

 

@PostConstruct
private void init() {
try {
Session session = resourceResolver.adaptTo(Session.class);
userId = session.getUserID();
} catch (Exception e) {
LOG.debug("Error");
}

}

 

Thanks,

Kiran Vedantam.

 

}