Fixed cookie lookup in case of children paths.
This commit is contained in:
parent
28fd4cceac
commit
19e856fa7b
|
@ -41,23 +41,27 @@ public class HttpCookieStore implements CookieStore
|
||||||
|
|
||||||
String host = destination.getHost();
|
String host = destination.getHost();
|
||||||
int port = destination.getPort();
|
int port = destination.getPort();
|
||||||
String key = host + ":" + port + path;
|
String key = host + ":" + port;
|
||||||
|
|
||||||
// First lookup: direct hit
|
// Root path lookup
|
||||||
Queue<HttpCookie> cookies = allCookies.get(key);
|
Queue<HttpCookie> cookies = allCookies.get(key + "/");
|
||||||
if (cookies != null)
|
if (cookies != null)
|
||||||
accumulateCookies(destination, cookies, result);
|
accumulateCookies(destination, cookies, result);
|
||||||
|
|
||||||
// Second lookup: root path
|
// Path lookup
|
||||||
if (!"/".equals(path))
|
String[] split = path.split("/");
|
||||||
|
for (int i = 1; i < split.length; i++)
|
||||||
{
|
{
|
||||||
key = host + ":" + port + "/";
|
String segment = split[i];
|
||||||
|
key += "/" + segment;
|
||||||
cookies = allCookies.get(key);
|
cookies = allCookies.get(key);
|
||||||
if (cookies != null)
|
if (cookies != null)
|
||||||
accumulateCookies(destination, cookies, result);
|
accumulateCookies(destination, cookies, result);
|
||||||
|
if (segment.length() > 0)
|
||||||
|
key += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Third lookup: parent domains
|
// Domain lookup
|
||||||
int domains = host.split("\\.").length - 1;
|
int domains = host.split("\\.").length - 1;
|
||||||
for (int i = 2; i <= domains; ++i)
|
for (int i = 2; i <= domains; ++i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -100,6 +100,21 @@ public class HttpCookieStoreTest
|
||||||
Assert.assertEquals("1", cookie.getValue());
|
Assert.assertEquals("1", cookie.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCookieStoredWithPathIsRetrievedWithChildPath() throws Exception
|
||||||
|
{
|
||||||
|
CookieStore cookies = new HttpCookieStore();
|
||||||
|
Destination destination = new HttpDestination(client, "http", "localhost", 80);
|
||||||
|
Assert.assertTrue(cookies.addCookie(destination, new HttpCookie("a", "1", null, "/path")));
|
||||||
|
|
||||||
|
List<HttpCookie> result = cookies.findCookies(destination, "/path/child");
|
||||||
|
Assert.assertNotNull(result);
|
||||||
|
Assert.assertEquals(1, result.size());
|
||||||
|
HttpCookie cookie = result.get(0);
|
||||||
|
Assert.assertEquals("a", cookie.getName());
|
||||||
|
Assert.assertEquals("1", cookie.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCookieStoredWithParentDomainIsRetrievedWithChildDomain() throws Exception
|
public void testCookieStoredWithParentDomainIsRetrievedWithChildDomain() throws Exception
|
||||||
{
|
{
|
||||||
|
@ -118,6 +133,19 @@ public class HttpCookieStoreTest
|
||||||
Assert.assertEquals(2, result.size());
|
Assert.assertEquals(2, result.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCookieStoredWithChildDomainIsNotRetrievedWithParentDomain() throws Exception
|
||||||
|
{
|
||||||
|
CookieStore cookies = new HttpCookieStore();
|
||||||
|
Destination childDestination = new HttpDestination(client, "http", "child.localhost.org", 80);
|
||||||
|
Assert.assertTrue(cookies.addCookie(childDestination, new HttpCookie("b", "2", null, "/")));
|
||||||
|
|
||||||
|
Destination parentDestination = new HttpDestination(client, "http", "localhost.org", 80);
|
||||||
|
List<HttpCookie> result = cookies.findCookies(parentDestination, "/path");
|
||||||
|
Assert.assertNotNull(result);
|
||||||
|
Assert.assertEquals(0, result.size());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExpiredCookieIsNotRetrieved() throws Exception
|
public void testExpiredCookieIsNotRetrieved() throws Exception
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue