package org.gcube.application.framework.core.session; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import javax.servlet.http.HttpSession; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SessionManager { /** The logger. */ private static final Logger logger = LoggerFactory.getLogger(SessionManager.class); // protected static Thread thread = new CleanSessionThread(); protected static SessionManager sessionManager = new SessionManager(); protected HashMap sessions; protected SessionManager() { sessions = new HashMap(); // thread.setDaemon(true); // thread.start(); } public static SessionManager getInstance() { return sessionManager; } public void setASLSession(HttpSession userSession, String username){ ASLSession aslSession = new ASLSession(userSession, username); sessions.put(userSession.getId() + "_" + username, aslSession); } public ASLSession getASLSession(String externalSessionID, String username) { ASLSession session = sessions.get(externalSessionID + "_" + username); // 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()); // } return session; } // @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(); // } // 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 keys = sessionManager.sessions.keySet(); // Iterator 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"); // } // // } }