1 /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
2 *
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 package org.acegisecurity.concurrent;
17
18 import org.springframework.util.Assert;
19
20 import java.util.Date;
21 import java.io.Serializable;
22
23
24 /**
25 * Represents a record of a session within the Acegi Security framework.<p>This is primarily used for concurrent
26 * session support.</p>
27 * <p>Sessions have three states: active, expired, and destroyed. A session can that is invalidated by
28 * <code>session.invalidate()</code> or via Servlet Container management is considered "destroyed". An "expired"
29 * session, on the other hand, is a session that Acegi Security wants to end because it was selected for removal for
30 * some reason (generally as it was the least recently used session and the maximum sessions for the user were
31 * reached). An "expired" session is removed as soon as possible by a <code>Filter</code>.</p>
32 *
33 * @author Ben Alex
34 * @version $Id: SessionInformation.java 1999 2007-08-30 21:38:07Z luke_t $
35 */
36 public class SessionInformation implements Serializable {
37 //~ Instance fields ================================================================================================
38
39 private Date lastRequest;
40 private Object principal;
41 private String sessionId;
42 private boolean expired = false;
43
44 //~ Constructors ===================================================================================================
45
46 public SessionInformation(Object principal, String sessionId, Date lastRequest) {
47 Assert.notNull(principal, "Principal required");
48 Assert.hasText(sessionId, "SessionId required");
49 Assert.notNull(lastRequest, "LastRequest required");
50 this.principal = principal;
51 this.sessionId = sessionId;
52 this.lastRequest = lastRequest;
53 }
54
55 //~ Methods ========================================================================================================
56
57 public void expireNow() {
58 this.expired = true;
59 }
60
61 public Date getLastRequest() {
62 return lastRequest;
63 }
64
65 public Object getPrincipal() {
66 return principal;
67 }
68
69 public String getSessionId() {
70 return sessionId;
71 }
72
73 public boolean isExpired() {
74 return expired;
75 }
76
77 /**
78 * Refreshes the internal lastRequest to the current date and time.
79 */
80 public void refreshLastRequest() {
81 this.lastRequest = new Date();
82 }
83 }