2012-09-12 12:47:59 +02:00
|
|
|
package org.gcube.application.framework.core.session;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.Set;
|
2013-03-22 17:08:06 +01:00
|
|
|
|
2016-06-30 16:36:52 +02:00
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
|
2015-09-28 14:40:43 +02:00
|
|
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
2013-03-22 17:08:06 +01:00
|
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
2013-02-22 17:52:54 +01:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
2012-09-12 12:47:59 +02:00
|
|
|
|
|
|
|
public class SessionManager {
|
2013-02-22 17:52:54 +01:00
|
|
|
|
|
|
|
/** The logger. */
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(SessionManager.class);
|
2012-09-12 12:47:59 +02:00
|
|
|
|
2016-06-30 16:36:52 +02:00
|
|
|
// protected static Thread thread = new CleanSessionThread();
|
2012-09-12 12:47:59 +02:00
|
|
|
protected static SessionManager sessionManager = new SessionManager();
|
|
|
|
protected HashMap<String, ASLSession> sessions;
|
|
|
|
|
|
|
|
protected SessionManager() {
|
|
|
|
sessions = new HashMap<String, ASLSession>();
|
2016-06-30 16:36:52 +02:00
|
|
|
// thread.setDaemon(true);
|
|
|
|
// thread.start();
|
2012-09-12 12:47:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static SessionManager getInstance() {
|
|
|
|
return sessionManager;
|
|
|
|
}
|
|
|
|
|
2016-06-30 16:36:52 +02:00
|
|
|
|
|
|
|
public void setASLSession(HttpSession userSession, String username){
|
|
|
|
ASLSession aslSession = new ASLSession(userSession, username);
|
|
|
|
sessions.put(userSession.getId() + "_" + username, aslSession);
|
|
|
|
}
|
|
|
|
|
2012-09-12 12:47:59 +02:00
|
|
|
public ASLSession getASLSession(String externalSessionID, String username)
|
|
|
|
{
|
|
|
|
ASLSession session = sessions.get(externalSessionID + "_" + username);
|
2016-06-30 16:36:52 +02:00
|
|
|
// if(session == null || !session.isValid() || !session.getUsername().equals(username))
|
|
|
|
// {
|
|
|
|
// session = new ASLSession(externalSessionID, username);
|
|
|
|
// sessions.put(externalSessionID + "_" + username, session);
|
|
|
|
// }
|
|
|
|
// if (session.getScope()!=null) //covers first helper's invocation
|
|
|
|
// ScopeProvider.instance.set(session.getScopeName());
|
|
|
|
//
|
|
|
|
// if (session.getSecurityToken()!=null){
|
|
|
|
// logger.debug("Setting SecurityTokenProvider to: "+session.getSecurityToken()+" in thread "+Thread.currentThread().getId());
|
|
|
|
// SecurityTokenProvider.instance.set(session.getSecurityToken());
|
|
|
|
// }
|
2012-09-12 12:47:59 +02:00
|
|
|
return session;
|
|
|
|
}
|
|
|
|
|
2016-06-30 16:36:52 +02:00
|
|
|
// @Override
|
|
|
|
// protected void finalize() throws Throwable {
|
|
|
|
// thread.interrupt();
|
|
|
|
// logger.debug(new Date(System.currentTimeMillis()) + " clean thread was interrupted");
|
|
|
|
// thread.join();
|
|
|
|
// logger.debug(new Date(System.currentTimeMillis()) + " clean thread was joint");
|
|
|
|
// super.finalize();
|
|
|
|
// }
|
2012-09-12 12:47:59 +02:00
|
|
|
|
|
|
|
|
2016-06-30 16:36:52 +02:00
|
|
|
// protected static class CleanSessionThread extends Thread
|
|
|
|
// {
|
|
|
|
// public void run()
|
|
|
|
// {
|
|
|
|
// while(true)
|
|
|
|
// {
|
|
|
|
// try {
|
|
|
|
// Thread.sleep(300000);
|
|
|
|
// } catch (InterruptedException e) {
|
|
|
|
// logger.error("Exception:", e);
|
|
|
|
// logger.debug(new Date(System.currentTimeMillis()) + " clean thread was interrupted (in clean thread)");
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// //TODO: cleanup invalid sessions: add locks...
|
|
|
|
// Set<String> keys = sessionManager.sessions.keySet();
|
|
|
|
// Iterator<String> iter = keys.iterator();
|
|
|
|
// while(iter.hasNext())
|
|
|
|
// {
|
|
|
|
// String extSessionID = iter.next();
|
|
|
|
// if(!sessionManager.sessions.get(extSessionID).isValid())
|
|
|
|
// {
|
|
|
|
// sessionManager.sessions.remove(extSessionID);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// logger.debug(new Date(System.currentTimeMillis()) + " clean thread was terminated");
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// }
|
2012-09-12 12:47:59 +02:00
|
|
|
}
|