Skip to content

Commit b5a113a

Browse files
committed
Add createdTime field to SessionInformation
Closes: gh-17359 Signed-off-by: Andrey Litvitski <[email protected]>
1 parent 5fefdd5 commit b5a113a

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

core/src/main/java/org/springframework/security/core/session/SessionInformation.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
* <code>Filter</code>.
3737
*
3838
* @author Ben Alex
39+
* @author Andrey Litvitski
3940
*/
4041
public class SessionInformation implements Serializable {
4142

@@ -49,13 +50,17 @@ public class SessionInformation implements Serializable {
4950

5051
private boolean expired = false;
5152

52-
public SessionInformation(Object principal, String sessionId, Date lastRequest) {
53+
private final Date createdTime;
54+
55+
public SessionInformation(Object principal, String sessionId, Date lastRequest, Date createdTime) {
5356
Assert.notNull(principal, "Principal required");
5457
Assert.hasText(sessionId, "SessionId required");
5558
Assert.notNull(lastRequest, "LastRequest required");
59+
Assert.notNull(lastRequest, "CreatedTime required");
5660
this.principal = principal;
5761
this.sessionId = sessionId;
5862
this.lastRequest = lastRequest;
63+
this.createdTime = createdTime;
5964
}
6065

6166
public void expireNow() {
@@ -74,6 +79,10 @@ public String getSessionId() {
7479
return this.sessionId;
7580
}
7681

82+
public Date getCreatedTime() {
83+
return this.createdTime;
84+
}
85+
7786
public boolean isExpired() {
7887
return this.expired;
7988
}

core/src/main/java/org/springframework/security/core/session/SessionRegistryImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ public void registerNewSession(String sessionId, Object principal) {
133133
if (this.logger.isDebugEnabled()) {
134134
this.logger.debug(LogMessage.format("Registering session %s, for principal %s", sessionId, principal));
135135
}
136-
this.sessionIds.put(sessionId, new SessionInformation(principal, sessionId, new Date()));
136+
Date currentDate = new Date();
137+
this.sessionIds.put(sessionId, new SessionInformation(principal, sessionId, new Date(currentDate.getTime()),
138+
new Date(currentDate.getTime())));
137139
this.principals.compute(principal, (key, sessionsUsedByPrincipal) -> {
138140
if (sessionsUsedByPrincipal == null) {
139141
sessionsUsedByPrincipal = new CopyOnWriteArraySet<>();

core/src/test/java/org/springframework/security/core/session/SessionInformationTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
* Tests {@link SessionInformation}.
2727
*
2828
* @author Ben Alex
29+
* @author Andrey Litvitski
2930
*/
3031
public class SessionInformationTests {
3132

@@ -34,10 +35,12 @@ public void testObject() throws Exception {
3435
Object principal = "Some principal object";
3536
String sessionId = "1234567890";
3637
Date currentDate = new Date();
37-
SessionInformation info = new SessionInformation(principal, sessionId, currentDate);
38+
SessionInformation info = new SessionInformation(principal, sessionId, new Date(currentDate.getTime()),
39+
new Date(currentDate.getTime()));
3840
assertThat(info.getPrincipal()).isEqualTo(principal);
3941
assertThat(info.getSessionId()).isEqualTo(sessionId);
4042
assertThat(info.getLastRequest()).isEqualTo(currentDate);
43+
assertThat(info.getCreatedTime()).isEqualTo(currentDate);
4144
Thread.sleep(10);
4245
info.refreshLastRequest();
4346
assertThat(info.getLastRequest().after(currentDate)).isTrue();

0 commit comments

Comments
 (0)