|
JSecurity | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.jsecurity.session.mgt.DelegatingSession
public class DelegatingSession
A DelegatingSession is a client-tier representation of a server side
Session.
This implementation is basically a proxy to a server-side SessionManager,
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 SessionManager 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.
| Constructor Summary | |
|---|---|
DelegatingSession()
|
|
DelegatingSession(SessionManager sessionManager,
Serializable id)
|
|
| Method Summary | |
|---|---|
Object |
getAttribute(Object key)
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. |
InetAddress |
getHostAddress()
Returns the InetAddress of the host that originated this session, or null if the host address is unknown. |
Serializable |
getId()
Returns the unique identifier assigned by the system upon session creation. |
Date |
getLastAccessTime()
Returns the last time the user associated with the session interacted with the system. |
SessionManager |
getSessionManager()
Returns the SessionManager used by this handle to invoke
all session-related methods. |
Date |
getStartTimestamp()
Returns the time the session was started; that is, the time the system created the instance. |
long |
getTimeout()
Returns the time in milliseconds that the session session may remain idle before expiring. |
Object |
removeAttribute(Object key)
Removes (unbinds) the object bound to this session under the specified key name. |
void |
setAttribute(Object key,
Object value)
Binds the specified value to this session, uniquely identified by the specifed key name. |
void |
setId(Serializable id)
Sets the sessionId used by this handle for all future SessionManager
method invocations. |
void |
setSessionManager(SessionManager sessionManager)
Sets the SessionManager to which this DelegatingSession will
delegate its method calls. |
void |
setTimeout(long maxIdleTimeInMillis)
Sets the time in milliseconds that the session may remain idle before expiring. |
void |
stop()
Explicitly stops (invalidates) this session and releases all associated resources. |
void |
touch()
Explicitly updates the lastAccessTime of this session. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public DelegatingSession()
public DelegatingSession(SessionManager sessionManager,
Serializable id)
| Method Detail |
|---|
public SessionManager getSessionManager()
SessionManager used by this handle to invoke
all session-related methods.
SessionManager used by this handle to invoke
all session-related methods.public void setSessionManager(SessionManager sessionManager)
SessionManager to which this DelegatingSession will
delegate its method calls. In a rich client environment, this SessionManager will
probably be a remoting proxy which executes remote method invocations. In a single-process
environment (e.g. a web application deployed in the same JVM of the application server),
the SessionManager can be the actual business POJO implementation.
You'll notice the Session interface and the SessionManager
interface are nearly identical. This is to ensure the SessionManager can support
most method calls in the Session interface, via this handle/proxy technique. The session
manager is implementated as a stateless business POJO, with the handle passing the
session id as necessary.
sessionManager - the SessionManager this handle will use when delegating
method calls.public void setId(Serializable id)
SessionManager
method invocations.
id - the sessionId to use for all SessionManager invocations.setSessionManager(SessionManager sessionManager)public Serializable getId()
SessionAll return values from this method are expected to have proper toString(),
equals(), and hashCode() implementations. Good candiadates for such
an identifier are UUIDs, Integers, and
Strings.
getId in interface SessionSession.getId()public Date getStartTimestamp()
Session
getStartTimestamp in interface SessionSession.getStartTimestamp()public Date getLastAccessTime()
Session
getLastAccessTime in interface SessionSession.getLastAccessTime()
public long getTimeout()
throws InvalidSessionException
Session
getTimeout in interface SessionInvalidSessionException - if the session has been stopped or expired prior to calling this method.
public void setTimeout(long maxIdleTimeInMillis)
throws InvalidSessionException
Session
setTimeout in interface SessionmaxIdleTimeInMillis - the time in milliseconds that the session may remain idle before expiring.
InvalidSessionException - if the session has been stopped or expired prior to calling this method.public InetAddress getHostAddress()
Session
getHostAddress in interface SessionSession.getHostAddress()
public void touch()
throws InvalidSessionException
SessionlastAccessTime of this session. This
method can be used to ensure a session does not time out.
Most programmers won't use this method explicitly and will instead rely calling the other Session methods to update the time transparently, or on a framework during a remote procedure call or upon a web request.
This method is particularly useful however when supporting rich-client applications such as Java Web Start appp, 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. The touch 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 an ExpiredSessionException. 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.
touch in interface SessionInvalidSessionException - if this session has stopped or expired prior to calling
this method.Session.touch()
public void stop()
throws InvalidSessionException
SessionIf this session has already been authenticated (i.e. the Subject that
owns this session has logged-in), calling this method explicitly might have undesired side effects:
Subject implementation to retain authentication state in the
Session. 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" the Subject.
As such, you might consider logging-out the 'owning'
Subject instead 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.
stop in interface SessionInvalidSessionException - if this session has stopped or expired prior to calling this method.Session.stop()
public Collection<Object> getAttributeKeys()
throws InvalidSessionException
Session
getAttributeKeys in interface SessionInvalidSessionException - if this session has stopped or expired prior to calling this method.Session.getAttributeKeys()
public Object getAttribute(Object key)
throws InvalidSessionException
Session
getAttribute in interface Sessionkey - the unique name of the object bound to this session
InvalidSessionException - if this session has stopped or expired prior to calling
this method.Session.getAttribute(Object key)
public void setAttribute(Object key,
Object value)
throws InvalidSessionException
SessionIf the value parameter is null, it has the same effect as if removeAttribute(key) was called.
setAttribute in interface Sessionkey - the name under which the value object will be bound in this sessionvalue - the object to bind in this session.
InvalidSessionException - if this session has stopped or expired prior to calling
this method.Session.setAttribute(Object key, Object value)
public Object removeAttribute(Object key)
throws InvalidSessionException
Session
removeAttribute in interface Sessionkey - the name uniquely identifying the object to remove
InvalidSessionException - if this session has stopped or expired prior to calling
this method.Session.removeAttribute(Object key)
|
JSecurity | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||