Search code examples
javasessionliferayliferay-7

adjust the user session after logging in in Liferay 7, how to get the session?


In liferay 7, I am trying to adjust the user session after the login is successful. I used to build a hook for that, and it used to work just fine. But now I am unable to retrieve the session to inspect an attribute.

@Component(immediate = true, property = { "key=login.events.post" }, service = LifecycleAction.class)
public class TestSessionAdjustAction implements LifecycleAction {
@Override

public void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException {
        final HttpSession session = lifecycleEvent.getSession();
        final TestAccessToken token = (TestAccessToken) session.getAttribute(TestWebkeys.TEST_ACCESS_TOKEN);
        if (token != null) {
            TestSessionUtil.put(token.getRefreshToken(), session);
        }
    }
}

The code is throwing a null pointer ex at:

session.getAttribute(TestWebkeys.TEST_ACCESS_TOKEN);

Solution

  • Poking around I fund that replacing my problematic line with

    final HttpSession session = lifecycleEvent.getRequest().getSession();

    solves the problem. (I hope this helps some one..cause, it took me a while)

    It seems like the lifecycleEvent has in its class several constructors and the one being used here, before my method, sets the session to null...

    public class LifecycleEvent {
    
    public LifecycleEvent() {
        this(null, null, null, null);
    }
    
    public LifecycleEvent(
        HttpServletRequest request, HttpServletResponse response) {
    
        this(null, request, response, null);
    }
    
    public LifecycleEvent(HttpSession session) {
        this(null, null, null, session);
    }
    
    public LifecycleEvent(String[] ids) {
        this(ids, null, null, null);
    }
    
    public LifecycleEvent(
        String[] ids, HttpServletRequest request, HttpServletResponse response,
        HttpSession session) {
    
        _ids = ids;
        _request = request;
        _response = response;
        _session = session;
    }
    
    public String[] getIds() {
        return _ids;
    }
    
    public HttpServletRequest getRequest() {
        return _request;
    }
    
    public HttpServletResponse getResponse() {
        return _response;
    }
    
    public HttpSession getSession() {
        return _session;
    }
    
    private final String[] _ids;
    private final HttpServletRequest _request;
    private final HttpServletResponse _response;
    private final HttpSession _session;}