Skip to content

Commit c539151

Browse files
sd1248nbogojevic
authored andcommitted
readId() fails, when timeStamp is appended to JSession (#11)
* readId() fails, when timeStamp is appended to JSession. * Timestamp parsing in clean() should be done based on appendTimestamp flag.
1 parent e7b0b9b commit c539151

3 files changed

Lines changed: 61 additions & 3 deletions

File tree

session-replacement/src/main/java/com/amadeus/session/servlet/BaseSessionTracking.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public abstract class BaseSessionTracking implements SessionTracking {
2121

2222
private boolean appendTimestamp;
2323

24+
protected static final char SESSION_ID_TIMESTAMP_SEPARATOR = '!';
25+
2426
@Override
2527
public void configure(SessionConfiguration configuration) {
2628
// Read standard configuration
@@ -42,8 +44,8 @@ public void configure(SessionConfiguration configuration) {
4244
public String newId() {
4345
String newId = idProvider.newId();
4446
if (appendTimestamp) {
45-
StringBuilder suffixedId = new StringBuilder(newId.length() + 11).append(newId);
46-
newId = suffixedId.append('!').append(System.currentTimeMillis()).toString();
47+
StringBuilder suffixedId = new StringBuilder(newId.length() + 11).append(newId);
48+
newId = suffixedId.append(SESSION_ID_TIMESTAMP_SEPARATOR).append(System.currentTimeMillis()).toString();
4749
}
4850
return newId;
4951
}
@@ -62,7 +64,18 @@ public String encodeUrl(RequestWithSession request, String url) {
6264
* @return extracted id or <code>null</code>
6365
*/
6466
protected String clean(String value) {
65-
return idProvider.readId(value);
67+
if (!appendTimestamp) {
68+
return idProvider.readId(value);
69+
}
70+
String timeStamp = "";
71+
String cleanValue = value;
72+
int separatorIndex = value.lastIndexOf(SESSION_ID_TIMESTAMP_SEPARATOR);
73+
if (separatorIndex != -1) {
74+
timeStamp = value.substring(separatorIndex);
75+
cleanValue = value.substring(0, separatorIndex);
76+
}
77+
cleanValue = idProvider.readId(cleanValue);
78+
return cleanValue != null ? cleanValue + timeStamp : cleanValue;
6679
}
6780

6881
}

session-replacement/src/test/java/com/amadeus/session/servlet/TestCookieSessionTracking.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,25 @@ public void testRetrieveId() {
7070
new Cookie("somesession", uuid.toString())
7171
});
7272
assertEquals(uuid.toString(), cookieSessionTracking.retrieveId(request));
73+
74+
String sessionIdWithTimestamp = uuid.toString() + BaseSessionTracking.SESSION_ID_TIMESTAMP_SEPARATOR + System.currentTimeMillis();
75+
String invalidSessionIdWithTimestamp = uuid.toString() + "-abcdefgh" + BaseSessionTracking.SESSION_ID_TIMESTAMP_SEPARATOR + System.currentTimeMillis();
76+
String sessionIdWithoutTimestamp = uuid.toString();
77+
78+
when(hsr.getCookies()).thenReturn(new Cookie[] { new Cookie("somesession", sessionIdWithTimestamp)});
79+
assertNull(cookieSessionTracking.retrieveId(request));
80+
when(hsr.getCookies()).thenReturn(new Cookie[] { new Cookie("somesession", sessionIdWithoutTimestamp)});
81+
assertEquals(sessionIdWithoutTimestamp, cookieSessionTracking.retrieveId(request));
82+
83+
sc.setTimestampSufix(true);
84+
cookieSessionTracking.configure(sc);
85+
86+
when(hsr.getCookies()).thenReturn(new Cookie[] { new Cookie("somesession", sessionIdWithTimestamp)});
87+
assertEquals(sessionIdWithTimestamp, cookieSessionTracking.retrieveId(request));
88+
when(hsr.getCookies()).thenReturn(new Cookie[] { new Cookie("somesession", sessionIdWithoutTimestamp)});
89+
assertEquals(sessionIdWithoutTimestamp, cookieSessionTracking.retrieveId(request));
90+
when(hsr.getCookies()).thenReturn(new Cookie[] { new Cookie("somesession", invalidSessionIdWithTimestamp)});
91+
assertNull(cookieSessionTracking.retrieveId(request));
7392
}
7493

7594
@Test

session-replacement/src/test/java/com/amadeus/session/servlet/TestUrlSessionTracking.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,32 @@ public void testRetrieveId() {
6262
when(hsr.getRequestURI()).thenReturn("/url;somesession="+uuid);
6363
String id = urlSessionTracking.retrieveId(request);
6464
assertEquals(uuid.toString(), id);
65+
66+
String sessionIdWithTimestamp = uuid.toString() + BaseSessionTracking.SESSION_ID_TIMESTAMP_SEPARATOR + System.currentTimeMillis();
67+
String invalidSessionIdWithTimestamp = uuid.toString() + "-abcdefgh" + BaseSessionTracking.SESSION_ID_TIMESTAMP_SEPARATOR + System.currentTimeMillis();
68+
String sessionIdWithoutTimestamp = uuid.toString();
69+
70+
when(hsr.getPathInfo()).thenReturn(";somesession="+sessionIdWithTimestamp);
71+
when(hsr.getRequestURI()).thenReturn("/url;somesession="+sessionIdWithTimestamp);
72+
assertNull(urlSessionTracking.retrieveId(request));
73+
when(hsr.getPathInfo()).thenReturn(";somesession="+sessionIdWithoutTimestamp);
74+
when(hsr.getRequestURI()).thenReturn("/url;somesession="+sessionIdWithoutTimestamp);
75+
assertEquals(sessionIdWithoutTimestamp, urlSessionTracking.retrieveId(request));
76+
when(hsr.getPathInfo()).thenReturn(";somesession="+invalidSessionIdWithTimestamp);
77+
when(hsr.getRequestURI()).thenReturn("/url;somesession="+invalidSessionIdWithTimestamp);
78+
assertNull(urlSessionTracking.retrieveId(request));
79+
80+
sc.setTimestampSufix(true);
81+
urlSessionTracking.configure(sc);
82+
when(hsr.getPathInfo()).thenReturn(";somesession="+sessionIdWithTimestamp);
83+
when(hsr.getRequestURI()).thenReturn("/url;somesession="+sessionIdWithTimestamp);
84+
assertEquals(sessionIdWithTimestamp, urlSessionTracking.retrieveId(request));
85+
when(hsr.getPathInfo()).thenReturn(";somesession="+sessionIdWithoutTimestamp);
86+
when(hsr.getRequestURI()).thenReturn("/url;somesession="+sessionIdWithoutTimestamp);
87+
assertEquals(sessionIdWithoutTimestamp, urlSessionTracking.retrieveId(request));
88+
when(hsr.getPathInfo()).thenReturn(";somesession="+invalidSessionIdWithTimestamp);
89+
when(hsr.getRequestURI()).thenReturn("/url;somesession="+invalidSessionIdWithTimestamp);
90+
assertNull(urlSessionTracking.retrieveId(request));
6591
}
6692

6793
@Test

0 commit comments

Comments
 (0)