gnu.javax.net.ssl

Class AbstractSessionContext

Implemented Interfaces:
SSLSessionContext
Known Direct Subclasses:
SimpleSessionContext

public abstract class AbstractSessionContext
extends Object
implements SSLSessionContext

A skeletal implementation of SSLSessionContext. This class may be subclassed to add extended functionality to session contexts, such as by storing sessions in files on disk, or by sharing contexts across different JVM instances.

In order to securely store sessions, along with private key data, the abstract methods and store(char[]) come into play. When storing sessions, a session context implementation must pass this password to the Session.prepare(char[]) method, before either writing the Serializable session to the underlying store, or getting the opaque Session.privateData() class from the session, and storing that.

As a simple example, that writes sessions to some object output stream:

char[] password = ...;
ObjectOutputStream out = ...;
...
for (Session s : this)
{
s.prepare(password);
out.writeObject(s);
}

The reverse must be done when deserializing sessions, by using the Session.repair(char[]) method, possibly by first calling Session.setPrivateData(java.io.Serializable) with the read, opaque private data type. Thus an example of reading may be:

char[] password = ...;
ObjectInputStream in = ...;
...
while (hasMoreSessions(in))
{
Session s = (Session) in.readObject();
s.repair(password);
addToThisStore(s);
}

Field Summary

protected long
timeout

Constructor Summary

AbstractSessionContext(int timeout)

Method Summary

SSLSession
getSession(byte[] sessionId)
Fetch a saved session by its ID.
SSLSession
getSession(String host, int port)
int
getSessionTimeout()
protected abstract Session
implGet(byte[] sessionId)
To be implemented by subclasses.
abstract void
load(char[] password)
Load this session store from the underlying media, if supported by the implementation.
static AbstractSessionContext
newInstance()
Create a new instance of a session context, according to the configured implementation class.
abstract void
put(Session session)
Add a new session to the store.
abstract void
remove(byte[] sessionId)
Remove a session from this store.
void
setSessionTimeout(int seconds)
abstract void
store(char[] password)
Commit this session store to the underlying media.

Methods inherited from class java.lang.Object

clone, equals, extends Object> getClass, finalize, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Details

timeout

protected long timeout

Constructor Details

AbstractSessionContext

protected AbstractSessionContext(int timeout)
Parameters:
timeout - The initial session timeout.

Method Details

getSession

public final SSLSession getSession(byte[] sessionId)
Fetch a saved session by its ID. This method will (possibly) deserialize and return the SSL session with that ID, or null if the requested session does not exist, or has expired.

Subclasses implementing this class must not perform any blocking operations in this method. If any blocking behavior is required, it must be done in the load(char[]) method.

Specified by:
getSession in interface SSLSessionContext
Parameters:
sessionId - The ID of the session to get.
Returns:
The found session, or null if no such session was found, or if that session has expired.

getSession

public final SSLSession getSession(String host,
                                   int port)

getSessionTimeout

public int getSessionTimeout()
Specified by:
getSessionTimeout in interface SSLSessionContext

implGet

protected abstract Session implGet(byte[] sessionId)
To be implemented by subclasses. Subclasses do not need to check timeouts in this method.
Parameters:
sessionId - The session ID.
Returns:
The session, or null if the requested session was not found.

load

public abstract void load(char[] password)
            throws SessionStoreException
Load this session store from the underlying media, if supported by the implementation.
Parameters:
password - The password that protects the sensitive data in this store.
Throws:
SessionStoreException - If reading this store fails, such as when an I/O exception occurs, or if the password is incorrect.

newInstance

public static AbstractSessionContext newInstance()
            throws SSLException
Create a new instance of a session context, according to the configured implementation class.
Returns:
The new session context.
Throws:
SSLException - If an error occurs in creating the instance.

put

public abstract void put(Session session)
Add a new session to the store. The underlying implementation will add the session to its store, possibly overwriting any existing session with the same ID.

Subclasses implementing this class must not perform any blocking operations in this method. If any blocking behavior is required, it must be done in the store(char[]) method.

Parameters:
session - The session to add.
Throws:
NullPointerException - If the argument is null.

remove

public abstract void remove(byte[] sessionId)
Remove a session from this store.

Subclasses implementing this class must not perform any blocking operations in this method. If any blocking behavior is required, it must be done in the store(char[]) method.

Parameters:
sessionId - The ID of the session to remove.

setSessionTimeout

public final void setSessionTimeout(int seconds)
Specified by:
setSessionTimeout in interface SSLSessionContext

store

public abstract void store(char[] password)
            throws SessionStoreException
Commit this session store to the underlying media. For session store implementations that support saving sessions across invocations of the JVM, this method will save any sessions that have not expired to some persistent media, so they may be loaded and used again later.
Parameters:
password - The password that will protect the sensitive data in this store.

AbstractSessionContext -- stores SSL sessions, possibly persistently. Copyright (C) 2006 Free Software Foundation, Inc. This file is a part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.