Skip to content

Commit 133f7df

Browse files
committed
Refactor session state validator to support serialization
1 parent 72b194e commit 133f7df

File tree

4 files changed

+110
-7
lines changed

4 files changed

+110
-7
lines changed

QueueIT.Security.Examples/web/simple.jsp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
<%@page import="java.util.concurrent.Callable"%>
12
<%@page import="queueit.security.*"%>
23
<%@page contentType="text/html" pageEncoding="UTF-8"%>
34
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
45
<%
6+
SessionValidationController.Configure(null, new Callable<IValidateResultRepository>() {
7+
public IValidateResultRepository call() {
8+
return new SessionValidateResultRepository();
9+
}
10+
});
511
try
612
{
713
IValidateResult result = SessionValidationController.validateRequest();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package queueit.security;
2+
3+
import java.net.URI;
4+
import java.util.Date;
5+
import java.util.UUID;
6+
7+
public class SessionStateModel implements java.io.Serializable {
8+
public UUID QueueId;
9+
public URI OriginalUrl;
10+
public Date TimeStamp;
11+
public RedirectType RedirectType;
12+
public Integer PlaceInQueue;
13+
}

QueueIT.Security/src/queueit/security/SessionValidateResultRepository.java

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,51 @@
44
import javax.servlet.http.HttpSession;
55

66
public class SessionValidateResultRepository extends ValidateResultRepositoryBase {
7-
8-
7+
98
@Override
109
public IValidateResult getValidationResult(IQueue queue) {
1110
HttpServletRequest request = RequestContext.getCurrentInstance().getRequest();
1211
HttpSession session = request.getSession(true);
1312

1413
String key = generateKey(queue.getCustomerId(), queue.getEventId());
15-
return (IValidateResult)session.getAttribute(key);
14+
SessionStateModel model = (SessionStateModel)session.getAttribute(key);
15+
16+
if (model == null)
17+
return null;
18+
19+
return new AcceptedConfirmedResult(
20+
queue,
21+
new Md5KnownUser(
22+
model.QueueId,
23+
model.PlaceInQueue,
24+
model.TimeStamp,
25+
queue.getCustomerId(),
26+
queue.getEventId(),
27+
model.RedirectType,
28+
model.OriginalUrl),
29+
true);
1630
}
1731

1832
@Override
1933
public void setValidationResult(IQueue queue, IValidateResult validationResult) {
20-
HttpServletRequest request = RequestContext.getCurrentInstance().getRequest();
21-
HttpSession session = request.getSession(true);
2234

23-
String key = generateKey(queue.getCustomerId(), queue.getEventId());
24-
session.setAttribute(key, validationResult);
35+
if (validationResult instanceof AcceptedConfirmedResult)
36+
{
37+
AcceptedConfirmedResult confirmedResult = (AcceptedConfirmedResult)validationResult;
38+
39+
HttpServletRequest request = RequestContext.getCurrentInstance().getRequest();
40+
HttpSession session = request.getSession(true);
41+
42+
String key = generateKey(queue.getCustomerId(), queue.getEventId());
43+
44+
SessionStateModel model = new SessionStateModel();
45+
model.QueueId = confirmedResult.getKnownUser().getQueueId();
46+
model.OriginalUrl = confirmedResult.getKnownUser().getOriginalUrl();
47+
model.TimeStamp = confirmedResult.getKnownUser().getTimeStamp();
48+
model.RedirectType = confirmedResult.getKnownUser().getRedirectType();
49+
model.PlaceInQueue = confirmedResult.getKnownUser().getPlaceInQueue();
50+
51+
session.setAttribute(key, model);
52+
}
2553
}
2654
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
package queueit.security;
3+
4+
import java.io.ByteArrayOutputStream;
5+
import java.io.IOException;
6+
import java.io.ObjectOutputStream;
7+
import java.net.URI;
8+
import java.util.Date;
9+
import java.util.UUID;
10+
import java.util.logging.Level;
11+
import java.util.logging.Logger;
12+
import org.junit.*;
13+
import org.junit.Test;
14+
import static org.junit.Assert.*;
15+
16+
public class SessionStateModelTest {
17+
@BeforeClass
18+
public static void setUpClass() {
19+
}
20+
21+
@AfterClass
22+
public static void tearDownClass() {
23+
}
24+
25+
@Before
26+
public void setUp() {
27+
}
28+
29+
@After
30+
public void tearDown() {
31+
}
32+
33+
34+
@Test
35+
public void SessionStateModel_Serialize_Test(){
36+
SessionStateModel model = new SessionStateModel();
37+
model.OriginalUrl = URI.create("http://www.queue-it.net");
38+
model.PlaceInQueue = 1574;
39+
model.QueueId = UUID.randomUUID();
40+
model.RedirectType = RedirectType.AfterEvent;
41+
model.TimeStamp = new Date();
42+
43+
ByteArrayOutputStream stream = new ByteArrayOutputStream(1024);
44+
ObjectOutputStream out;
45+
try {
46+
out = new ObjectOutputStream(stream);
47+
out.writeObject(model);
48+
out.close();
49+
stream.close();
50+
} catch (IOException ex) {
51+
assertTrue(false);
52+
}
53+
54+
assertTrue(true);
55+
}
56+
}

0 commit comments

Comments
 (0)