Class DefaultSessionIdManager

  • All Implemented Interfaces:
    SessionIdManager, org.eclipse.jetty.util.component.Container, org.eclipse.jetty.util.component.Destroyable, org.eclipse.jetty.util.component.Dumpable, org.eclipse.jetty.util.component.LifeCycle

    @ManagedObject
    public class DefaultSessionIdManager
    extends org.eclipse.jetty.util.component.ContainerLifeCycle
    implements SessionIdManager
    DefaultSessionIdManager Manages session ids to ensure each session id within a context is unique, and that session ids can be shared across contexts (but not session contents). There is only 1 session id manager per Server instance. Runs a HouseKeeper thread to periodically check for expired Sessions.
    See Also:
    HouseKeeper
    • Nested Class Summary

      • Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException
      • Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

        org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener
      • Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

        org.eclipse.jetty.util.component.LifeCycle.Listener
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String __NEW_SESSION_ID  
      protected HouseKeeper _houseKeeper  
      protected boolean _ownHouseKeeper  
      protected java.util.Random _random  
      protected long _reseed  
      protected Server _server  
      protected boolean _weakRandom  
      protected java.lang.String _workerAttr  
      protected java.lang.String _workerName  
      protected static java.util.concurrent.atomic.AtomicLong COUNTER  
      • Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        FAILED, STARTED, STARTING, STOPPED, STOPPING
      • Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

        KEY
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void doStart()  
      protected void doStop()  
      void expireAll​(java.lang.String id)
      Remove an id from use by telling all contexts to remove a session with this id.
      java.lang.String getExtendedId​(java.lang.String clusterId, javax.servlet.http.HttpServletRequest request)
      Get the session ID with any worker ID.
      java.lang.String getId​(java.lang.String extendedId)
      Get the session ID without any worker ID.
      java.util.Random getRandom()  
      long getReseed()  
      Server getServer()  
      java.util.Set<SessionHandler> getSessionHandlers()
      Get SessionHandler for every context.
      HouseKeeper getSessionHouseKeeper()  
      java.lang.String getWorkerName()
      Get the workname.
      void initRandom()
      Set up a random number generator for the sessionids.
      void invalidateAll​(java.lang.String id)
      Invalidate all sessions on all contexts that share the same id.
      boolean isIdInUse​(java.lang.String id)  
      java.lang.String newSessionId​(long seedTerm)  
      java.lang.String newSessionId​(javax.servlet.http.HttpServletRequest request, long created)
      Create a new session id if necessary.
      java.lang.String renewSessionId​(java.lang.String oldClusterId, java.lang.String oldNodeId, javax.servlet.http.HttpServletRequest request)
      Generate a new id for a session and update across all SessionManagers.
      void setRandom​(java.util.Random random)  
      void setReseed​(long reseed)
      Set the reseed probability.
      void setServer​(Server server)  
      void setSessionHouseKeeper​(HouseKeeper houseKeeper)  
      void setWorkerName​(java.lang.String workerName)
      Set the workername.
      java.lang.String toString()  
      • Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

        addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans
      • Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface org.eclipse.jetty.util.component.Container

        getCachedBeans, getEventListeners
      • Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

        dumpSelf
      • Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle

        addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
    • Field Detail

      • __NEW_SESSION_ID

        public static final java.lang.String __NEW_SESSION_ID
        See Also:
        Constant Field Values
      • COUNTER

        protected static final java.util.concurrent.atomic.AtomicLong COUNTER
      • _random

        protected java.util.Random _random
      • _weakRandom

        protected boolean _weakRandom
      • _workerName

        protected java.lang.String _workerName
      • _workerAttr

        protected java.lang.String _workerAttr
      • _reseed

        protected long _reseed
      • _server

        protected Server _server
      • _ownHouseKeeper

        protected boolean _ownHouseKeeper
    • Constructor Detail

      • DefaultSessionIdManager

        public DefaultSessionIdManager​(Server server)
        Parameters:
        server - the server associated with the id manager
      • DefaultSessionIdManager

        public DefaultSessionIdManager​(Server server,
                                       java.util.Random random)
        Parameters:
        server - the server associated with the id manager
        random - a random number generator to use for ids
    • Method Detail

      • setServer

        public void setServer​(Server server)
        Parameters:
        server - the server associated with this id manager
      • getServer

        public Server getServer()
        Returns:
        the server associated with this id manager
      • getWorkerName

        @ManagedAttribute(value="unique name for this node",
                          readonly=true)
        public java.lang.String getWorkerName()
        Get the workname. If set, the workername is dot appended to the session ID and can be used to assist session affinity in a load balancer.
        Specified by:
        getWorkerName in interface SessionIdManager
        Returns:
        name or null
      • setWorkerName

        public void setWorkerName​(java.lang.String workerName)
        Set the workername. If set, the workername is dot appended to the session ID and can be used to assist session affinity in a load balancer. A worker name starting with $ is used as a request attribute name to lookup the worker name that can be dynamically set by a request Customizer.
        Parameters:
        workerName - the name of the worker, if null it is coerced to empty string
      • getRandom

        public java.util.Random getRandom()
        Returns:
        the random number generator
      • setRandom

        public void setRandom​(java.util.Random random)
        Parameters:
        random - a random number generator for generating ids
      • getReseed

        public long getReseed()
        Returns:
        the reseed probability
      • setReseed

        public void setReseed​(long reseed)
        Set the reseed probability.
        Parameters:
        reseed - If non zero then when a random long modulo the reseed value == 1, the SecureRandom will be reseeded.
      • newSessionId

        public java.lang.String newSessionId​(javax.servlet.http.HttpServletRequest request,
                                             long created)
        Create a new session id if necessary.
        Specified by:
        newSessionId in interface SessionIdManager
        Parameters:
        request - the request with the sesion
        created - the timestamp for when the session was created
        Returns:
        the new session id
      • newSessionId

        public java.lang.String newSessionId​(long seedTerm)
        Parameters:
        seedTerm - the seed for RNG
        Returns:
        a new unique session id
      • isIdInUse

        public boolean isIdInUse​(java.lang.String id)
        Specified by:
        isIdInUse in interface SessionIdManager
        Parameters:
        id - The plain session ID (ie no workername extension)
        Returns:
        True if the session ID is in use by at least one context.
      • doStart

        protected void doStart()
                        throws java.lang.Exception
        Overrides:
        doStart in class org.eclipse.jetty.util.component.ContainerLifeCycle
        Throws:
        java.lang.Exception
      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Overrides:
        doStop in class org.eclipse.jetty.util.component.ContainerLifeCycle
        Throws:
        java.lang.Exception
      • initRandom

        public void initRandom()
        Set up a random number generator for the sessionids. By preference, use a SecureRandom but allow to be injected.
      • getExtendedId

        public java.lang.String getExtendedId​(java.lang.String clusterId,
                                              javax.servlet.http.HttpServletRequest request)
        Get the session ID with any worker ID.
        Specified by:
        getExtendedId in interface SessionIdManager
        Parameters:
        clusterId - the cluster id
        request - the request
        Returns:
        sessionId plus any worker ID.
      • getId

        public java.lang.String getId​(java.lang.String extendedId)
        Get the session ID without any worker ID.
        Specified by:
        getId in interface SessionIdManager
        Parameters:
        extendedId - the session id with the worker extension
        Returns:
        sessionId without any worker ID.
      • invalidateAll

        public void invalidateAll​(java.lang.String id)
        Description copied from interface: SessionIdManager
        Invalidate all sessions on all contexts that share the same id.
        Specified by:
        invalidateAll in interface SessionIdManager
        Parameters:
        id - the session id
      • renewSessionId

        public java.lang.String renewSessionId​(java.lang.String oldClusterId,
                                               java.lang.String oldNodeId,
                                               javax.servlet.http.HttpServletRequest request)
        Generate a new id for a session and update across all SessionManagers.
        Specified by:
        renewSessionId in interface SessionIdManager
        Parameters:
        oldClusterId - the old plain session id
        oldNodeId - the old fully qualified id
        request - the request containing the session
        Returns:
        the new session id
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class org.eclipse.jetty.util.component.AbstractLifeCycle