Package org.apache.shiro.session.mgt
Class DelegatingSession
- java.lang.Object
-
- org.apache.shiro.session.mgt.DelegatingSession
-
- All Implemented Interfaces:
Serializable,Session
public class DelegatingSession extends Object implements Session, Serializable
A DelegatingSession is a client-tier representation of a server sideSession. This implementation is basically a proxy to a server-sideNativeSessionManager, which will return the proper results for each method call.A DelegatingSession will cache data when appropriate to avoid a remote method invocation, only communicating with the server when necessary.
Of course, if used in-process with a NativeSessionManager business POJO, as might be the case in a web-based application where the web classes and server-side business pojos exist in the same JVM, a remote method call will not be incurred.
- Since:
- 0.1
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description DelegatingSession(NativeSessionManager sessionManager, SessionKey key)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ObjectgetAttribute(Object attributeKey)Returns the object bound to this session identified by the specified key.Collection<Object>getAttributeKeys()Returns the keys of all the attributes stored under this session.StringgetHost()Returns the host name or IP string of the host that originated this session, ornullif the host is unknown.SerializablegetId()Returns the unique identifier assigned by the system upon session creation.DategetLastAccessTime()Returns the last time the application received a request or method invocation from the user associated with this session.DategetStartTimestamp()Returns the time the session was started; that is, the time the system created the instance.longgetTimeout()Returns the time in milliseconds that the session session may remain idle before expiring.ObjectremoveAttribute(Object attributeKey)Removes (unbinds) the object bound to this session under the specifiedkeyname.voidsetAttribute(Object attributeKey, Object value)Binds the specifiedvalueto this session, uniquely identified by the specifiedkeyname.voidsetTimeout(long maxIdleTimeInMillis)Sets the time in milliseconds that the session may remain idle before expiring.voidstop()Explicitly stops (invalidates) this session and releases all associated resources.voidtouch()Explicitly updates thelastAccessTimeof this session to the current time when this method is invoked.
-
-
-
Constructor Detail
-
DelegatingSession
public DelegatingSession(NativeSessionManager sessionManager, SessionKey key)
-
-
Method Detail
-
getId
public Serializable getId()
Description copied from interface:SessionReturns the unique identifier assigned by the system upon session creation. All return values from this method are expected to have propertoString(),equals(), andhashCode()implementations. Good candidates for such an identifier areUUIDs,Integers, andStrings.- Specified by:
getIdin interfaceSession- Returns:
- The unique identifier assigned to the session upon creation.
- See Also:
Session.getId()
-
getStartTimestamp
public Date getStartTimestamp()
Description copied from interface:SessionReturns the time the session was started; that is, the time the system created the instance.- Specified by:
getStartTimestampin interfaceSession- Returns:
- The time the system created the session.
- See Also:
Session.getStartTimestamp()
-
getLastAccessTime
public Date getLastAccessTime()
Description copied from interface:SessionReturns the last time the application received a request or method invocation from the user associated with this session. Application calls to this method do not affect this access time.- Specified by:
getLastAccessTimein interfaceSession- Returns:
- The time the user last interacted with the system.
- See Also:
Session.getLastAccessTime()
-
getTimeout
public long getTimeout() throws InvalidSessionExceptionDescription copied from interface:SessionReturns the time in milliseconds that the session session may remain idle before expiring.- A negative return value means the session will never expire.
- A non-negative return value (0 or greater) means the session expiration will occur if idle for that length of time.
HttpSession'sgetMaxInactiveInterval()method, the scale on this method is different: Shiro Sessions use millisecond values for timeout whereasHttpSession.getMaxInactiveIntervaluses seconds. Always use millisecond values with Shiro sessions.- Specified by:
getTimeoutin interfaceSession- Returns:
- the time in milliseconds the session may remain idle before expiring.
- Throws:
InvalidSessionException- if the session has been stopped or expired prior to calling this method.
-
setTimeout
public void setTimeout(long maxIdleTimeInMillis) throws InvalidSessionExceptionDescription copied from interface:SessionSets the time in milliseconds that the session may remain idle before expiring.- A negative value means the session will never expire.
- A non-negative value (0 or greater) means the session expiration will occur if idle for that length of time.
HttpSession'sgetMaxInactiveInterval()method, the scale on this method is different: Shiro Sessions use millisecond values for timeout whereasHttpSession.getMaxInactiveIntervaluses seconds. Always use millisecond values with Shiro sessions.- Specified by:
setTimeoutin interfaceSession- Parameters:
maxIdleTimeInMillis- the time in milliseconds that the session may remain idle before expiring.- Throws:
InvalidSessionException- if the session has been stopped or expired prior to calling this method.
-
getHost
public String getHost()
Description copied from interface:SessionReturns the host name or IP string of the host that originated this session, ornullif the host is unknown.
-
touch
public void touch() throws InvalidSessionExceptionDescription copied from interface:SessionExplicitly updates thelastAccessTimeof this session to the current time when this method is invoked. This method can be used to ensure a session does not time out. Most programmers won't use this method directly and will instead rely on the last access time to be updated automatically as a result of an incoming web request or remote procedure call/method invocation. However, this method is particularly useful when supporting rich-client applications such as Java Web Start app, Java or Flash applets, etc. Although rare, it is possible in a rich-client environment that a user continuously interacts with the client-side application without a server-side method call ever being invoked. If this happens over a long enough period of time, the user's server-side session could time-out. Again, such cases are rare since most rich-clients frequently require server-side method invocations. In this example though, the user's session might still be considered valid because the user is actively "using" the application, just not communicating with the server. But because no server-side method calls are invoked, there is no way for the server to know if the user is sitting idle or not, so it must assume so to maintain session integrity. Thistouch()method could be invoked by the rich-client application code during those times to ensure that the next time a server-side method is invoked, the invocation will not throw anExpiredSessionException. In short terms, it could be used periodically to ensure a session does not time out. How often this rich-client "maintenance" might occur is entirely dependent upon the application and would be based on variables such as session timeout configuration, usage characteristics of the client application, network utilization and application server performance.- Specified by:
touchin interfaceSession- Throws:
InvalidSessionException- if this session has stopped or expired prior to calling this method.- See Also:
Session.touch()
-
stop
public void stop() throws InvalidSessionExceptionDescription copied from interface:SessionExplicitly stops (invalidates) this session and releases all associated resources. If this session has already been authenticated (i.e. theSubjectthat owns this session has logged-in), calling this method explicitly might have undesired side effects: It is common for aSubjectimplementation to retain authentication state in theSession. If the session is explicitly stopped by application code by calling this method directly, it could clear out any authentication state that might exist, thereby effectively "unauthenticating" theSubject. As such, you might considerlogging-outthe 'owning'Subjectinstead of manually calling this method, as a log out is expected to stop the corresponding session automatically, and also allows framework code to execute additional cleanup logic.- Specified by:
stopin interfaceSession- Throws:
InvalidSessionException- if this session has stopped or expired prior to calling this method.- See Also:
Session.stop()
-
getAttributeKeys
public Collection<Object> getAttributeKeys() throws InvalidSessionException
Description copied from interface:SessionReturns the keys of all the attributes stored under this session. If there are no attributes, this returns an empty collection.- Specified by:
getAttributeKeysin interfaceSession- Returns:
- the keys of all attributes stored under this session, or an empty collection if there are no session attributes.
- Throws:
InvalidSessionException- if this session has stopped or expired prior to calling this method.- See Also:
Session.getAttributeKeys()
-
getAttribute
public Object getAttribute(Object attributeKey) throws InvalidSessionException
Description copied from interface:SessionReturns the object bound to this session identified by the specified key. If there is no object bound under the key,nullis returned.- Specified by:
getAttributein interfaceSession- Parameters:
attributeKey- the unique name of the object bound to this session- Returns:
- the object bound under the specified
keyname ornullif there is no object bound under that name. - Throws:
InvalidSessionException- if this session has stopped or expired prior to calling this method.- See Also:
Session.getAttribute(Object key)
-
setAttribute
public void setAttribute(Object attributeKey, Object value) throws InvalidSessionException
Description copied from interface:SessionBinds the specifiedvalueto this session, uniquely identified by the specifiedkeyname. If there is already an object bound under thekeyname, that existing object will be replaced by the newvalue. If thevalueparameter is null, it has the same effect as ifremoveAttributewas called.- Specified by:
setAttributein interfaceSession- Parameters:
attributeKey- the name under which thevalueobject will be bound in this sessionvalue- the object to bind in this session.- Throws:
InvalidSessionException- if this session has stopped or expired prior to calling this method.- See Also:
Session.setAttribute(Object key, Object value)
-
removeAttribute
public Object removeAttribute(Object attributeKey) throws InvalidSessionException
Description copied from interface:SessionRemoves (unbinds) the object bound to this session under the specifiedkeyname.- Specified by:
removeAttributein interfaceSession- Parameters:
attributeKey- the name uniquely identifying the object to remove- Returns:
- the object removed or
nullif there was no object bound under the namekey. - Throws:
InvalidSessionException- if this session has stopped or expired prior to calling this method.- See Also:
Session.removeAttribute(Object key)
-
-