1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package edu.internet2.middleware.shibboleth.common.session.impl;
19
20 import java.security.Principal;
21 import java.util.Set;
22
23 import javax.security.auth.Subject;
24
25 import org.joda.time.DateTime;
26 import org.joda.time.chrono.ISOChronology;
27
28 import edu.internet2.middleware.shibboleth.common.session.Session;
29
30
31 public abstract class AbstractSession implements Session {
32
33
34 private static final long serialVersionUID = 4726780089406295821L;
35
36
37 private final String sessionId;
38
39
40 private Subject subject;
41
42
43 private long inactivityTimeout;
44
45
46 private long lastActivity;
47
48
49
50
51
52
53
54 public AbstractSession(String id, long timeout) {
55 sessionId = id;
56 subject = new Subject();
57 inactivityTimeout = timeout;
58 lastActivity = new DateTime().toDateTime(ISOChronology.getInstanceUTC()).getMillis();
59 }
60
61
62 public synchronized String getSessionID() {
63 return sessionId;
64 }
65
66
67 public synchronized Subject getSubject() {
68 return subject;
69 }
70
71
72 public synchronized void setSubject(Subject newSubject) {
73 subject = newSubject;
74 }
75
76
77 public synchronized String getPrincipalName() {
78 Set<Principal> principals = subject.getPrincipals();
79 if (principals != null && !principals.isEmpty()) {
80 return principals.iterator().next().getName();
81 } else {
82 return null;
83 }
84 }
85
86
87 public synchronized long getInactivityTimeout() {
88 return inactivityTimeout;
89 }
90
91
92 public synchronized DateTime getLastActivityInstant() {
93 return new DateTime(lastActivity, ISOChronology.getInstanceUTC());
94 }
95
96
97 public synchronized void setLastActivityInstant(DateTime activity) {
98 lastActivity = activity.toDateTime(ISOChronology.getInstanceUTC()).getMillis();
99 }
100 }