Set cookie path and find cookie based on that path.

This commit is contained in:
Rob Winch
2014-06-26 16:25:45 -05:00
parent 60d4795bfb
commit 2edeb9e498
2 changed files with 31 additions and 4 deletions

View File

@@ -66,8 +66,9 @@ public final class CookieHttpSessionStrategy implements HttpSessionStrategy {
Cookie cookie = new Cookie(cookieName, session.getId()); Cookie cookie = new Cookie(cookieName, session.getId());
cookie.setHttpOnly(true); cookie.setHttpOnly(true);
cookie.setSecure(request.isSecure()); cookie.setSecure(request.isSecure());
cookie.setPath(cookiePath(request));
response.addCookie(cookie); response.addCookie(cookie);
// TODO set the path?
// TODO set the domain? // TODO set the domain?
} }
@@ -77,6 +78,7 @@ public final class CookieHttpSessionStrategy implements HttpSessionStrategy {
sessionCookie.setMaxAge(0); sessionCookie.setMaxAge(0);
sessionCookie.setHttpOnly(true); sessionCookie.setHttpOnly(true);
sessionCookie.setSecure(request.isSecure()); sessionCookie.setSecure(request.isSecure());
sessionCookie.setPath(cookiePath(request));
response.addCookie(sessionCookie); response.addCookie(sessionCookie);
} }
@@ -97,16 +99,23 @@ public final class CookieHttpSessionStrategy implements HttpSessionStrategy {
* @return the first cookie with the given name, or {@code null} if none is found * @return the first cookie with the given name, or {@code null} if none is found
*/ */
private static Cookie getCookie(HttpServletRequest request, String name) { private static Cookie getCookie(HttpServletRequest request, String name) {
// TODO what if there are multiple by the same name w/ different path
Assert.notNull(request, "Request must not be null"); Assert.notNull(request, "Request must not be null");
Cookie cookies[] = request.getCookies(); Cookie cookies[] = request.getCookies();
Cookie result = null;
if (cookies != null) { if (cookies != null) {
for (Cookie cookie : cookies) { for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) { if (name.equals(cookie.getName())) {
return cookie; if(cookiePath(request).equals(cookie.getPath())) {
return cookie;
}
result = cookie;
} }
} }
} }
return null; return result;
}
private static String cookiePath(HttpServletRequest request) {
return request.getContextPath() + "/";
} }
} }

View File

@@ -52,6 +52,15 @@ public class CookieHttpSessionStrategyTests {
assertThat(getSessionId()).isEqualTo(session.getId()); assertThat(getSessionId()).isEqualTo(session.getId());
} }
@Test
public void onNewSessionCookiePath() throws Exception {
request.setContextPath("/somethingunique");
strategy.onNewSession(session, request, response);
Cookie sessionCookie = response.getCookie(cookieName);
assertThat(sessionCookie.getPath()).isEqualTo(request.getContextPath() + "/");
}
@Test @Test
public void onNewSessionCustomCookieName() throws Exception { public void onNewSessionCustomCookieName() throws Exception {
setCookieName("CUSTOM"); setCookieName("CUSTOM");
@@ -65,6 +74,15 @@ public class CookieHttpSessionStrategyTests {
assertThat(getSessionId()).isEmpty(); assertThat(getSessionId()).isEmpty();
} }
@Test
public void onDeleteSessionCookiePath() throws Exception {
request.setContextPath("/somethingunique");
strategy.onInvalidateSession(request, response);
Cookie sessionCookie = response.getCookie(cookieName);
assertThat(sessionCookie.getPath()).isEqualTo(request.getContextPath() + "/");
}
@Test @Test
public void onDeleteSessionCustomCookieName() throws Exception { public void onDeleteSessionCustomCookieName() throws Exception {
setCookieName("CUSTOM"); setCookieName("CUSTOM");