Class DefaultSessionIdManager

    • 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
        Description copied from class: ContainerLifeCycle
        Starts the managed lifecycle beans in the order they were added.
        Overrides:
        doStart in class ContainerLifeCycle
        Throws:
        AbstractLifeCycle.StopException - If thrown, the lifecycle will immediately be stopped.
        java.lang.Exception - If there was a problem starting. Will cause a transition to FAILED state
      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Stops the managed lifecycle beans in the reverse order they were added.
        Overrides:
        doStop in class ContainerLifeCycle
        Throws:
        java.lang.Exception - If there was a problem stopping. Will cause a transition to FAILED state
      • 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