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 final String sessionId;
34
35
36 private Subject subject;
37
38
39 private long inactivityTimeout;
40
41
42 private long lastActivity;
43
44
45
46
47
48
49
50 public AbstractSession(String id, long timeout) {
51 sessionId = id;
52 subject = new Subject();
53 inactivityTimeout = timeout;
54 lastActivity = new DateTime().toDateTime(ISOChronology.getInstanceUTC()).getMillis();
55 }
56
57
58 public synchronized String getSessionID() {
59 return sessionId;
60 }
61
62
63 public synchronized Subject getSubject() {
64 return subject;
65 }
66
67
68 public synchronized void setSubject(Subject newSubject) {
69 subject = newSubject;
70 }
71
72
73 public synchronized String getPrincipalName() {
74 Set<Principal> principals = subject.getPrincipals();
75 if (principals != null && !principals.isEmpty()) {
76 return principals.iterator().next().getName();
77 } else {
78 return null;
79 }
80 }
81
82
83 public synchronized long getInactivityTimeout() {
84 return inactivityTimeout;
85 }
86
87
88 public synchronized DateTime getLastActivityInstant() {
89 return new DateTime(lastActivity, ISOChronology.getInstanceUTC());
90 }
91
92
93 public synchronized void setLastActivityInstant(DateTime activity) {
94 lastActivity = activity.toDateTime(ISOChronology.getInstanceUTC()).getMillis();
95 }
96 }