001: /*
002: * CoadunationLib: The coaduntion implementation library.
003: * Copyright (C) 2006 Rift IT Contracting
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
018: *
019: * SessionManager.java
020: *
021: * This object is responsible for managing the ThreadPermissionSession objects
022: * in memory.
023: */
024:
025: // package definition
026: package com.rift.coad.lib.security;
027:
028: // log 4 j imports
029: import org.apache.log4j.Logger;
030:
031: /**
032: * This object is responsible for managing the ThreadPermissionSession objects
033: * in memory.
034: *
035: * @author Brett Chaldecott
036: */
037: public final class SessionManager {
038:
039: // log object
040: private Logger log = Logger.getLogger(SessionManager.class
041: .getName());
042:
043: // the classes private singleton member variables
044: private static SessionManager singleton = null;
045:
046: // the classes private member variables
047: private ThreadsPermissionContainer permissions = null;
048:
049: /**
050: * Creates a new instance of SessionManager
051: */
052: private SessionManager(ThreadsPermissionContainer permissions) {
053: this .permissions = permissions;
054: }
055:
056: /**
057: * The init method for the session manager. This will be called to
058: * instanciate the session manager.
059: *
060: * @return The reference to the session manager.
061: * @param permissions The reference to the permission object.
062: */
063: public synchronized static SessionManager init(
064: ThreadsPermissionContainer permissions)
065: throws SecurityException {
066: if (singleton != null) {
067: throw new SecurityException(
068: "The SessionManager has already been initialized.");
069: }
070: singleton = new SessionManager(permissions);
071: return singleton;
072: }
073:
074: /**
075: * This method returns the current instance of the session manager of a new
076: * on if none exists.
077: *
078: * @return A reference to the singleton session manager.
079: */
080: public synchronized static SessionManager getInstance()
081: throws SecurityException {
082: if (singleton != null) {
083: return singleton;
084: }
085: throw new SecurityException(
086: "The session manager has not been initialized");
087: }
088:
089: /**
090: * This method will init a new session for the given thread. If one does
091: * exist that session will be over written.
092: *
093: * @param user The user object used to init the session.
094: * @exception SecurityException
095: */
096: public void initSession() throws SecurityException {
097: Long threadId = new Long(Thread.currentThread().getId());
098: permissions.putSession(threadId, new ThreadPermissionSession(
099: threadId, new UserSession()));
100: }
101:
102: /**
103: * This method returns the permission information for the current session
104: * identified by the thread making the call.
105: *
106: * @return The thread permission session object.
107: * @exception SecurityException
108: */
109: public ThreadPermissionSession getSession()
110: throws SecurityException {
111: return permissions.getSession();
112: }
113:
114: /**
115: * This method removes the session information for the calling thread.
116: *
117: * @exception SecurityException
118: */
119: public void purgeSession() throws SecurityException {
120: Long threadId = new Long(Thread.currentThread().getId());
121: permissions.removeSession(threadId);
122: }
123: }
|