Class ManagerBase

    • Field Detail

      • secureRandomClass

        protected java.lang.String secureRandomClass
        The Java class name of the secure random number generator class to be used when generating session identifiers. The random number generator class must be self-seeding and have a zero-argument constructor. If not specified, an instance of SecureRandom will be generated.
      • secureRandomAlgorithm

        protected java.lang.String secureRandomAlgorithm
        The name of the algorithm to use to create instances of SecureRandom which are used to generate session IDs. If no algorithm is specified, SHA1PRNG is used. If SHA1PRNG is not available, the platform default will be used. To use the platform default (which may be SHA1PRNG), specify the empty string. If an invalid algorithm and/or provider is specified the SecureRandom instances will be created using the defaults. If that fails, the SecureRandom instances will be created using platform defaults.
      • secureRandomProvider

        protected java.lang.String secureRandomProvider
        The name of the provider to use to create instances of SecureRandom which are used to generate session IDs. If no provider is specified the platform default is used. If an invalid algorithm and/or provider is specified the SecureRandom instances will be created using the defaults. If that fails, the SecureRandom instances will be created using platform defaults.
      • sessionIdGeneratorClass

        protected java.lang.Class<? extends SessionIdGenerator> sessionIdGeneratorClass
      • sessionMaxAliveTime

        protected volatile int sessionMaxAliveTime
        The longest time (in seconds) that an expired session had been alive.
      • TIMING_STATS_CACHE_SIZE

        protected static final int TIMING_STATS_CACHE_SIZE
        See Also:
        Constant Field Values
      • expiredSessions

        protected final java.util.concurrent.atomic.AtomicLong expiredSessions
        Number of sessions that have expired.
      • sessions

        protected java.util.Map<java.lang.String,​Session> sessions
        The set of currently active Sessions for this Manager, keyed by session identifier.
      • sessionCounter

        protected long sessionCounter
      • maxActive

        protected volatile int maxActive
      • maxActiveSessions

        protected int maxActiveSessions
        The maximum number of active Sessions allowed, or -1 for no limit.
      • rejectedSessions

        protected int rejectedSessions
        Number of session creations that failed due to maxActiveSessions.
      • duplicates

        protected volatile int duplicates
      • processingTime

        protected long processingTime
        Processing time during session expiration.
      • processExpiresFrequency

        protected int processExpiresFrequency
        Frequency of the session expiration, and related manager operations. Manager operations will be done once for the specified amount of backgroundProcess calls (ie, the lower the amount, the most often the checks will occur).
      • sm

        protected static final StringManager sm
        The string manager for this package.
      • support

        protected final java.beans.PropertyChangeSupport support
        The property change support for this component.
    • Constructor Detail

      • ManagerBase

        public ManagerBase()
    • Method Detail

      • getSessionActivityCheck

        public boolean getSessionActivityCheck()
        Description copied from interface: Manager
        If this is true, Tomcat will track the number of active requests for each session. When determining if a session is valid, any session with at least one active request will always be considered valid. If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to true, the default of this setting will be true, else the default value will be false.
        Specified by:
        getSessionActivityCheck in interface Manager
        Returns:
        the flag value
      • setSessionActivityCheck

        public void setSessionActivityCheck​(boolean sessionActivityCheck)
        Description copied from interface: Manager
        Configure if Tomcat will track the number of active requests for each session. When determining if a session is valid, any session with at least one active request will always be considered valid.
        Specified by:
        setSessionActivityCheck in interface Manager
        Parameters:
        sessionActivityCheck - the new flag value
      • getSessionLastAccessAtStart

        public boolean getSessionLastAccessAtStart()
        Description copied from interface: Manager
        If this is true, the last accessed time for sessions will be calculated from the beginning of the previous request. If false, the last accessed time for sessions will be calculated from the end of the previous request. This also affects how the idle time is calculated. If org.apache.catalina.STRICT_SERVLET_COMPLIANCE is set to true, the default of this setting will be true, else the default value will be false.
        Specified by:
        getSessionLastAccessAtStart in interface Manager
        Returns:
        the flag value
      • setSessionLastAccessAtStart

        public void setSessionLastAccessAtStart​(boolean sessionLastAccessAtStart)
        Description copied from interface: Manager
        Configure if the last accessed time for sessions will be calculated from the beginning of the previous request. If false, the last accessed time for sessions will be calculated from the end of the previous request. This also affects how the idle time is calculated.
        Specified by:
        setSessionLastAccessAtStart in interface Manager
        Parameters:
        sessionLastAccessAtStart - the new flag value
      • getSessionAttributeNameFilter

        public java.lang.String getSessionAttributeNameFilter()
        Obtain the regular expression used to filter session attribute based on attribute name. The regular expression is anchored so it must match the entire name
        Returns:
        The regular expression currently used to filter attribute names. null means no filter is applied. If an empty string is specified then no names will match the filter and all attributes will be blocked.
      • setSessionAttributeNameFilter

        public void setSessionAttributeNameFilter​(java.lang.String sessionAttributeNameFilter)
                                           throws java.util.regex.PatternSyntaxException
        Set the regular expression to use to filter session attributes based on attribute name. The regular expression is anchored so it must match the entire name.
        Parameters:
        sessionAttributeNameFilter - The regular expression to use to filter session attributes based on attribute name. Use null if no filtering is required. If an empty string is specified then no names will match the filter and all attributes will be blocked.
        Throws:
        java.util.regex.PatternSyntaxException - If the expression is not valid
      • getSessionAttributeNamePattern

        protected java.util.regex.Pattern getSessionAttributeNamePattern()
        Provides getSessionAttributeNameFilter() as a pre-compiled regular expression pattern.
        Returns:
        The pre-compiled pattern used to filter session attributes based on attribute name. null means no filter is applied.
      • getSessionAttributeValueClassNameFilter

        public java.lang.String getSessionAttributeValueClassNameFilter()
        Obtain the regular expression used to filter session attribute based on the implementation class of the value. The regular expression is anchored and must match the fully qualified class name.
        Returns:
        The regular expression currently used to filter class names. null means no filter is applied. If an empty string is specified then no names will match the filter and all attributes will be blocked.
      • getSessionAttributeValueClassNamePattern

        protected java.util.regex.Pattern getSessionAttributeValueClassNamePattern()
        Provides getSessionAttributeValueClassNameFilter() as a pre-compiled regular expression pattern.
        Returns:
        The pre-compiled pattern used to filter session attributes based on the implementation class name of the value. null means no filter is applied.
      • setSessionAttributeValueClassNameFilter

        public void setSessionAttributeValueClassNameFilter​(java.lang.String sessionAttributeValueClassNameFilter)
                                                     throws java.util.regex.PatternSyntaxException
        Set the regular expression to use to filter classes used for session attributes. The regular expression is anchored and must match the fully qualified class name.
        Parameters:
        sessionAttributeValueClassNameFilter - The regular expression to use to filter session attributes based on class name. Use null if no filtering is required. If an empty string is specified then no names will match the filter and all attributes will be blocked.
        Throws:
        java.util.regex.PatternSyntaxException - If the expression is not valid
      • getWarnOnSessionAttributeFilterFailure

        public boolean getWarnOnSessionAttributeFilterFailure()
        Should a warn level log message be generated if a session attribute is not persisted / replicated / restored.
        Returns:
        true if a warn level log message should be generated
      • setWarnOnSessionAttributeFilterFailure

        public void setWarnOnSessionAttributeFilterFailure​(boolean warnOnSessionAttributeFilterFailure)
        Configure whether or not a warn level log message should be generated if a session attribute is not persisted / replicated / restored.
        Parameters:
        warnOnSessionAttributeFilterFailure - true if the warn level message should be generated
      • getContext

        public Context getContext()
        Description copied from interface: Manager
        Get the Context with which this Manager is associated.
        Specified by:
        getContext in interface Manager
        Returns:
        The associated Context
      • setContext

        public void setContext​(Context context)
        Description copied from interface: Manager
        Set the Context with which this Manager is associated. The Context must be set to a non-null value before the Manager is first used. Multiple calls to this method before first use are permitted. Once the Manager has been used, this method may not be used to change the Context (including setting a null value) that the Manager is associated with.
        Specified by:
        setContext in interface Manager
        Parameters:
        context - The newly associated Context
      • getClassName

        public java.lang.String getClassName()
        Returns:
        The name of the implementation class.
      • setSessionIdGenerator

        public void setSessionIdGenerator​(SessionIdGenerator sessionIdGenerator)
        Description copied from interface: Manager
        Sets the session id generator
        Specified by:
        setSessionIdGenerator in interface Manager
        Parameters:
        sessionIdGenerator - The session id generator
      • getName

        public java.lang.String getName()
        Returns:
        The descriptive short name of this Manager implementation.
      • getSecureRandomClass

        public java.lang.String getSecureRandomClass()
        Returns:
        The secure random number generator class name.
      • setSecureRandomClass

        public void setSecureRandomClass​(java.lang.String secureRandomClass)
        Set the secure random number generator class name.
        Parameters:
        secureRandomClass - The new secure random number generator class name
      • getSecureRandomAlgorithm

        public java.lang.String getSecureRandomAlgorithm()
        Returns:
        The secure random number generator algorithm name.
      • setSecureRandomAlgorithm

        public void setSecureRandomAlgorithm​(java.lang.String secureRandomAlgorithm)
        Set the secure random number generator algorithm name.
        Parameters:
        secureRandomAlgorithm - The new secure random number generator algorithm name
      • getSecureRandomProvider

        public java.lang.String getSecureRandomProvider()
        Returns:
        The secure random number generator provider name.
      • setSecureRandomProvider

        public void setSecureRandomProvider​(java.lang.String secureRandomProvider)
        Set the secure random number generator provider name.
        Parameters:
        secureRandomProvider - The new secure random number generator provider name
      • getRejectedSessions

        public int getRejectedSessions()
        Description copied from interface: Manager
        Gets the number of sessions that were not created because the maximum number of active sessions was reached.
        Specified by:
        getRejectedSessions in interface Manager
        Returns:
        Number of rejected sessions
      • getExpiredSessions

        public long getExpiredSessions()
        Description copied from interface: Manager
        Gets the number of sessions that have expired.
        Specified by:
        getExpiredSessions in interface Manager
        Returns:
        Number of sessions that have expired
      • setExpiredSessions

        public void setExpiredSessions​(long expiredSessions)
        Description copied from interface: Manager
        Sets the number of sessions that have expired.
        Specified by:
        setExpiredSessions in interface Manager
        Parameters:
        expiredSessions - Number of sessions that have expired
      • getProcessingTime

        public long getProcessingTime()
      • setProcessingTime

        public void setProcessingTime​(long processingTime)
      • getProcessExpiresFrequency

        public int getProcessExpiresFrequency()
        Returns:
        The frequency of manager checks.
      • setProcessExpiresFrequency

        public void setProcessExpiresFrequency​(int processExpiresFrequency)
        Set the manager checks frequency.
        Parameters:
        processExpiresFrequency - the new manager checks frequency
      • getPersistAuthentication

        public boolean getPersistAuthentication()
        Return whether sessions managed by this manager shall persist authentication information or not.
        Returns:
        true, sessions managed by this manager shall persist authentication information; false otherwise
      • setPersistAuthentication

        public void setPersistAuthentication​(boolean persistAuthentication)
        Set whether sessions managed by this manager shall persist authentication information or not.
        Parameters:
        persistAuthentication - if true, sessions managed by this manager shall persist authentication information
      • getPersistAuthenticationNotes

        @Deprecated
        public boolean getPersistAuthenticationNotes()
        Deprecated.
        Will be removed in Tomcat 10.1.x where it is effectively hard-coded to true
        Return whether sessions managed by this manager shall persist authentication notes used by FORM authentication or not.
        Returns:
        true, sessions managed by this manager shall persist authentication notes used by FORM authentication; false otherwise
      • setPersistAuthenticationNotes

        @Deprecated
        public void setPersistAuthenticationNotes​(boolean persistAuthenticationNotes)
        Deprecated.
        Will be removed in Tomcat 10.1.x where it is effectively hard-coded to true
        Set whether sessions managed by this manager shall persist authentication notes used by FORM authentication or not.
        Parameters:
        persistAuthenticationNotes - if true, sessions managed by this manager shall persist authentication notes used by FORM authentication
      • backgroundProcess

        public void backgroundProcess()
        This method will be invoked by the context/container on a periodic basis and allows the manager to implement a method that executes periodic tasks, such as expiring sessions etc.

        Direct call to processExpires()

        Specified by:
        backgroundProcess in interface Manager
      • processExpires

        public void processExpires()
        Invalidate all sessions that have expired.
      • add

        public void add​(Session session)
        Description copied from interface: Manager
        Add this Session to the set of active Sessions for this Manager.
        Specified by:
        add in interface Manager
        Parameters:
        session - Session to be added
      • addPropertyChangeListener

        public void addPropertyChangeListener​(java.beans.PropertyChangeListener listener)
        Description copied from interface: Manager
        Add a property change listener to this component.
        Specified by:
        addPropertyChangeListener in interface Manager
        Parameters:
        listener - The listener to add
      • createSession

        public Session createSession​(java.lang.String sessionId)
        Description copied from interface: Manager
        Construct and return a new session object, based on the default settings specified by this Manager's properties. The session id specified will be used as the session id. If a new session cannot be created for any reason, return null.
        Specified by:
        createSession in interface Manager
        Parameters:
        sessionId - The session id which should be used to create the new session; if null, the session id will be assigned by this method, and available via the getId() method of the returned session.
        Returns:
        An empty Session object with the given ID or a newly created session ID if none was specified
      • createEmptySession

        public Session createEmptySession()
        Description copied from interface: Manager
        Get a session from the recycled ones or create a new empty one. The PersistentManager manager does not need to create session data because it reads it from the Store.
        Specified by:
        createEmptySession in interface Manager
        Returns:
        An empty Session object
      • findSession

        public Session findSession​(java.lang.String id)
                            throws java.io.IOException
        Description copied from interface: Manager
        Return the active Session, associated with this Manager, with the specified session id (if any); otherwise return null.
        Specified by:
        findSession in interface Manager
        Parameters:
        id - The session id for the session to be returned
        Returns:
        the request session or null if a session with the requested ID could not be found
        Throws:
        java.io.IOException - if an input/output error occurs while processing this request
      • findSessions

        public Session[] findSessions()
        Description copied from interface: Manager
        Return the set of active Sessions associated with this Manager. If this Manager has no active Sessions, a zero-length array is returned.
        Specified by:
        findSessions in interface Manager
        Returns:
        All the currently active sessions managed by this manager
      • remove

        public void remove​(Session session)
        Description copied from interface: Manager
        Remove this Session from the active Sessions for this Manager.
        Specified by:
        remove in interface Manager
        Parameters:
        session - Session to be removed
      • remove

        public void remove​(Session session,
                           boolean update)
        Description copied from interface: Manager
        Remove this Session from the active Sessions for this Manager.
        Specified by:
        remove in interface Manager
        Parameters:
        session - Session to be removed
        update - Should the expiration statistics be updated
      • removePropertyChangeListener

        public void removePropertyChangeListener​(java.beans.PropertyChangeListener listener)
        Description copied from interface: Manager
        Remove a property change listener from this component.
        Specified by:
        removePropertyChangeListener in interface Manager
        Parameters:
        listener - The listener to remove
      • rotateSessionId

        public java.lang.String rotateSessionId​(Session session)
        Description copied from interface: Manager
        Change the session ID of the current session to a new randomly generated session ID.
        Specified by:
        rotateSessionId in interface Manager
        Parameters:
        session - The session to change the session ID for
        Returns:
        The new session ID
      • changeSessionId

        public void changeSessionId​(Session session,
                                    java.lang.String newId)
        Description copied from interface: Manager
        Change the session ID of the current session to a specified session ID.
        Specified by:
        changeSessionId in interface Manager
        Parameters:
        session - The session to change the session ID for
        newId - new session ID
      • changeSessionId

        protected void changeSessionId​(Session session,
                                       java.lang.String newId,
                                       boolean notifySessionListeners,
                                       boolean notifyContainerListeners)
      • willAttributeDistribute

        public boolean willAttributeDistribute​(java.lang.String name,
                                               java.lang.Object value)
        Would the Manager distribute the given session attribute? Manager implementations may provide additional configuration options to control which attributes are distributable.

        This implementation excludes session attributes from distribution if the:

        Specified by:
        willAttributeDistribute in interface Manager
        Parameters:
        name - The attribute name
        value - The attribute value
        Returns:
        true if the Manager would distribute the given attribute otherwise false
      • getNewSession

        protected StandardSession getNewSession()
        Get new session class to be used in the doLoad() method.
        Returns:
        a new session for use with this manager
      • generateSessionId

        protected java.lang.String generateSessionId()
        Generate and return a new session identifier.
        Returns:
        a new session id
      • getEngine

        public Engine getEngine()
        Retrieve the enclosing Engine for this Manager.
        Returns:
        an Engine object (or null).
      • getJvmRoute

        public java.lang.String getJvmRoute()
        Retrieve the JvmRoute for the enclosing Engine.
        Returns:
        the JvmRoute or null.
      • setSessionCounter

        public void setSessionCounter​(long sessionCounter)
        Description copied from interface: Manager
        Sets the total number of sessions created by this manager.
        Specified by:
        setSessionCounter in interface Manager
        Parameters:
        sessionCounter - Total number of sessions created by this manager.
      • getSessionCounter

        public long getSessionCounter()
        Description copied from interface: Manager
        Returns the total number of sessions created by this manager.
        Specified by:
        getSessionCounter in interface Manager
        Returns:
        Total number of sessions created by this manager.
      • getDuplicates

        public int getDuplicates()
        Number of duplicated session IDs generated by the random source. Anything bigger than 0 means problems.
        Returns:
        The count of duplicates
      • setDuplicates

        public void setDuplicates​(int duplicates)
      • getActiveSessions

        public int getActiveSessions()
        Description copied from interface: Manager
        Gets the number of currently active sessions.
        Specified by:
        getActiveSessions in interface Manager
        Returns:
        Number of currently active sessions
      • getMaxActive

        public int getMaxActive()
        Description copied from interface: Manager
        Gets the maximum number of sessions that have been active at the same time.
        Specified by:
        getMaxActive in interface Manager
        Returns:
        Maximum number of sessions that have been active at the same time
      • setMaxActive

        public void setMaxActive​(int maxActive)
        Description copied from interface: Manager
        (Re)sets the maximum number of sessions that have been active at the same time.
        Specified by:
        setMaxActive in interface Manager
        Parameters:
        maxActive - Maximum number of sessions that have been active at the same time.
      • getMaxActiveSessions

        public int getMaxActiveSessions()
        Returns:
        The maximum number of active Sessions allowed, or -1 for no limit.
      • setMaxActiveSessions

        public void setMaxActiveSessions​(int max)
        Set the maximum number of active Sessions allowed, or -1 for no limit.
        Parameters:
        max - The new maximum number of sessions
      • getSessionMaxAliveTime

        public int getSessionMaxAliveTime()
        Description copied from interface: Manager
        Gets the longest time (in seconds) that an expired session had been alive.
        Specified by:
        getSessionMaxAliveTime in interface Manager
        Returns:
        Longest time (in seconds) that an expired session had been alive.
      • setSessionMaxAliveTime

        public void setSessionMaxAliveTime​(int sessionMaxAliveTime)
        Description copied from interface: Manager
        Sets the longest time (in seconds) that an expired session had been alive.
        Specified by:
        setSessionMaxAliveTime in interface Manager
        Parameters:
        sessionMaxAliveTime - Longest time (in seconds) that an expired session had been alive.
      • updateSessionMaxAliveTime

        public void updateSessionMaxAliveTime​(int sessionAliveTime)
        Updates the sessionMaxAliveTime attribute if the candidate value is larger than the current value.
        Parameters:
        sessionAliveTime - The candidate value (in seconds) for the new sessionMaxAliveTime value.
      • getSessionAverageAliveTime

        public int getSessionAverageAliveTime()
        Gets the average time (in seconds) that expired sessions had been alive. This may be based on sample data.

        Based on the last 100 sessions to expire. If less than 100 sessions have expired then all available data is used.

        Specified by:
        getSessionAverageAliveTime in interface Manager
        Returns:
        Average time (in seconds) that expired sessions had been alive.
      • getSessionCreateRate

        public int getSessionCreateRate()
        Gets the current rate of session creation (in session per minute). This may be based on sample data.

        Based on the creation time of the previous 100 sessions created. If less than 100 sessions have been created then all available data is used.

        Specified by:
        getSessionCreateRate in interface Manager
        Returns:
        The current rate (in sessions per minute) of session creation
      • getSessionExpireRate

        public int getSessionExpireRate()
        Gets the current rate of session expiration (in session per minute). This may be based on sample data

        Based on the expiry time of the previous 100 sessions expired. If less than 100 sessions have expired then all available data is used.

        Specified by:
        getSessionExpireRate in interface Manager
        Returns:
        The current rate (in sessions per minute) of session expiration
      • listSessionIds

        public java.lang.String listSessionIds()
        For debugging.
        Returns:
        A space separated list of all session IDs currently active
      • getSessionAttribute

        public java.lang.String getSessionAttribute​(java.lang.String sessionId,
                                                    java.lang.String key)
        For debugging.
        Parameters:
        sessionId - The ID for the session of interest
        key - The key for the attribute to obtain
        Returns:
        The attribute value for the specified session, if found, null otherwise
      • getSession

        public java.util.HashMap<java.lang.String,​java.lang.String> getSession​(java.lang.String sessionId)
        Returns information about the session with the given session id.

        The session information is organized as a HashMap, mapping session attribute names to the String representation of their values.

        Parameters:
        sessionId - Session id
        Returns:
        HashMap mapping session attribute names to the String representation of their values, or null if no session with the specified id exists, or if the session does not have any attributes
      • expireSession

        public void expireSession​(java.lang.String sessionId)
      • getThisAccessedTimestamp

        public long getThisAccessedTimestamp​(java.lang.String sessionId)
      • getThisAccessedTime

        public java.lang.String getThisAccessedTime​(java.lang.String sessionId)
      • getLastAccessedTimestamp

        public long getLastAccessedTimestamp​(java.lang.String sessionId)
      • getLastAccessedTime

        public java.lang.String getLastAccessedTime​(java.lang.String sessionId)
      • getCreationTime

        public java.lang.String getCreationTime​(java.lang.String sessionId)
      • getCreationTimestamp

        public long getCreationTimestamp​(java.lang.String sessionId)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getObjectNameKeyProperties

        public java.lang.String getObjectNameKeyProperties()
        Description copied from class: LifecycleMBeanBase
        Allow sub-classes to specify the key properties component of the ObjectName that will be used to register this component.
        Specified by:
        getObjectNameKeyProperties in class LifecycleMBeanBase
        Returns:
        The string representation of the key properties component of the desired ObjectName
      • getDomainInternal

        public java.lang.String getDomainInternal()
        Description copied from class: LifecycleMBeanBase
        Method implemented by sub-classes to identify the domain in which MBeans should be registered.
        Specified by:
        getDomainInternal in class LifecycleMBeanBase
        Returns:
        The name of the domain to use to register MBeans.