StatelessSessionActivator.java revision d0da70ccbba38b773e7a7cc71bc124b06206d201
/*
* The contents of this file are subject to the terms of the Common Development and
* Distribution License (the License). You may not use this file except in compliance with the
* License.
*
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
* specific language governing permission and limitations under the License.
*
* When distributing Covered Software, include this CDDL Header Notice in each file and include
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions copyright [year] [name of copyright owner]".
*
* Copyright 2015 ForgeRock AS.
*/
package com.sun.identity.authentication.service;
import com.iplanet.dpro.session.SessionException;
import com.iplanet.dpro.session.service.InternalSession;
import com.iplanet.dpro.session.service.SessionService;
import org.forgerock.guice.core.InjectorHolder;
import org.forgerock.openam.sso.providers.stateless.StatelessSessionFactory;
import org.forgerock.util.annotations.VisibleForTesting;
/**
* Creates stateless sessions after authentication.
*/
class StatelessSessionActivator extends DefaultSessionActivator {
static final StatelessSessionActivator INSTANCE = new StatelessSessionActivator();
private volatile StatelessSessionFactory statelessSessionFactory;
@VisibleForTesting
StatelessSessionActivator(final StatelessSessionFactory statelessSessionFactory) {
this.statelessSessionFactory = statelessSessionFactory;
}
private StatelessSessionActivator() {
this(null);
}
@Override
protected InternalSession createSession(SessionService sessionService, LoginState loginState) {
return sessionService.newInternalSession(loginState.getOrgDN(), null, true);
}
@Override
protected boolean activateSession(InternalSession session, LoginState loginState) throws SessionException {
boolean activated = session.activate(loginState.getUserDN(), true);
if (activated) {
// Update the session id in the login state to reflect the activated session
loginState.setSessionID(getStatelessSessionFactory().generate(session).getID());
}
// Make sure that session is never scheduled
session.cancel();
return activated;
}
private StatelessSessionFactory getStatelessSessionFactory() {
if (statelessSessionFactory == null) {
statelessSessionFactory = InjectorHolder.getInstance(StatelessSessionFactory.class);
}
return statelessSessionFactory;
}
}