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: * UserSession.java
020: *
021: * The user object identifying a user to the security system.
022: */
023:
024: // the package
025: package com.rift.coad.lib.security;
026:
027: // java imports
028: import java.util.Set;
029: import java.util.Date;
030: import java.util.HashSet;
031:
032: // coadunation imports
033: import com.rift.coad.lib.common.RandomGuid;
034:
035: /**
036: * The user object identifying a user to the security system.
037: *
038: * @author Brett Chaldecott
039: */
040: public class UserSession implements PrincipalContainer, Cloneable {
041:
042: // classes member variables
043: private String name = null;
044: private String sessionId = null;
045: private Set principals = null;
046: private Date touchTime = new Date();
047: private long expiryTime = 0;
048: private boolean valid = true;
049:
050: /**
051: * The default constructor responsible for creating the default nobody user.
052: *
053: * @exception SecurityException
054: */
055: public UserSession() throws SecurityException {
056: try {
057: name = "nobody";
058: sessionId = RandomGuid.getInstance().getGuid();
059: this .principals = new HashSet();
060: } catch (Exception ex) {
061: throw new SecurityException(
062: "Failed to initialize the users session : "
063: + ex.getMessage(), ex);
064: }
065: }
066:
067: /**
068: * Creates a new instance of UserSession
069: */
070: public UserSession(String name, Set principals)
071: throws SecurityException {
072: try {
073: this .name = name;
074: sessionId = RandomGuid.getInstance().getGuid();
075: this .principals = principals;
076: } catch (Exception ex) {
077: throw new SecurityException(
078: "Failed to initialize the users session : "
079: + ex.getMessage(), ex);
080: }
081: }
082:
083: /**
084: * Creates a new instance of UserSession
085: *
086: * @param name The name associated with the new user session.
087: * @param sessionId The id of the session.
088: * @param principals The principals of this user.
089: */
090: public UserSession(String name, String sessionId, Set principals) {
091: this .name = name;
092: this .sessionId = sessionId;
093: this .principals = principals;
094: }
095:
096: /**
097: * The getter method for the name of this role.
098: *
099: * @return The string containing the name of this role.
100: */
101: public String getName() {
102: return name;
103: }
104:
105: /**
106: * This method returns the id of the users session id.
107: *
108: * @return The id of the users session.
109: */
110: public String getSessionId() {
111: return sessionId;
112: }
113:
114: /**
115: * This method returns the id of the users session id.
116: *
117: * @return The id of the users session.
118: */
119: public void setSessionId(String sessionId) {
120: this .sessionId = sessionId;
121: }
122:
123: /**
124: * This method returns the list of principals.
125: *
126: * @return The list of principals.
127: */
128: public Set getPrincipals() {
129: return principals;
130: }
131:
132: /**
133: * This method set the list of principals.
134: *
135: * @param The list of principals.
136: */
137: public void setPrincipals(Set principals) {
138: this .principals = principals;
139: }
140:
141: /**
142: * This method returns the touch time of the user session.
143: *
144: * @return The last time this object was touched.
145: */
146: public synchronized Date getTouchTime() {
147: return touchTime;
148: }
149:
150: /**
151: * This method results in the users session being touched.
152: *
153: * @exception SecurityException
154: */
155: public synchronized void touch() throws SecurityException {
156: if (isExpired() || valid == false) {
157: throw new SecurityException(
158: "The object has expired or been invalidated.");
159: }
160: touchTime = new Date();
161: }
162:
163: /**
164: * The getter for the expiry time value.
165: *
166: * @return the expiry time of this object.
167: */
168: public synchronized long getExpiryTime() {
169: return expiryTime;
170: }
171:
172: /**
173: * The setter for the expiry time value.
174: *
175: * @param expiryTime The new expiry time.
176: */
177: public synchronized void setExpiryTime(long expiryTime) {
178: this .expiryTime = expiryTime;
179: }
180:
181: /**
182: * This method returns true if this object has expired in memory.
183: *
184: * @return TRUE if expired FALSE if not.
185: */
186: public synchronized boolean isExpired() {
187: if (!valid) {
188: return true;
189: } else if (expiryTime == 0) {
190: return false;
191: } else if (new Date().getTime() > (touchTime.getTime() + expiryTime)) {
192: return true;
193: }
194: return false;
195: }
196:
197: /**
198: * This method will mark this session as invalid.
199: */
200: public synchronized void invalidate() {
201: valid = false;
202: }
203:
204: /**
205: * This method returns a clone of the original user object.
206: *
207: * @return A clone of the orinal object.
208: */
209: public Object clone() throws CloneNotSupportedException {
210: return super.clone();
211: }
212: }
|