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