@Override protected MultiValueMap<String, HttpCookie> initCookies() { MultiValueMap<String, HttpCookie> cookies = new LinkedMultiValueMap<>(); for (CharSequence name : this.request.cookies().keySet()) { for (Cookie cookie : this.request.cookies().get(name)) { HttpCookie httpCookie = new HttpCookie(name.toString(), cookie.value()); cookies.add(name.toString(), httpCookie); } } return cookies; }
@Override public Map<String, String> cookies() { Map<String, String> map = new HashMap<>(8); this.cookies.forEach(cookie -> map.put(cookie.name(), cookie.value())); return map; }
@Override public Map<String, String> cookies() { Map<String, String> map = new HashMap<>(8); this.cookies.forEach(cookie -> map.put(cookie.name(), cookie.value())); return map; }
@Override protected MultiValueMap<String, HttpCookie> initCookies() { MultiValueMap<String, HttpCookie> cookies = new LinkedMultiValueMap<>(); for (CharSequence name : this.request.cookies().keySet()) { for (Cookie cookie : this.request.cookies().get(name)) { HttpCookie httpCookie = new HttpCookie(name.toString(), cookie.value()); cookies.add(name.toString(), httpCookie); } } return cookies; }
private static ImmutableMap<String, String> doExtractCookies(final String[] cookieStrings) { ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); for (String cookie : cookieStrings) { Set<Cookie> decodeCookies = ServerCookieDecoder.STRICT.decode(cookie); for (Cookie decodeCookie : decodeCookies) { builder.put(decodeCookie.name(), decodeCookie.value()); } } return builder.build(); } }
@Override public MultiValueMap<String, ResponseCookie> getCookies() { MultiValueMap<String, ResponseCookie> result = new LinkedMultiValueMap<>(); this.response.cookies().values().stream().flatMap(Collection::stream) .forEach(cookie -> result.add(cookie.name(), ResponseCookie.from(cookie.name(), cookie.value()) .domain(cookie.domain()) .path(cookie.path()) .maxAge(cookie.maxAge()) .secure(cookie.isSecure()) .httpOnly(cookie.isHttpOnly()) .build())); return CollectionUtils.unmodifiableMultiValueMap(result); }
private void returnMultipleCookiesEvenIfTheyHaveSameName() { CookieStore store = new ThreadSafeCookieStore(); store.add(Uri.create("http://foo.com"), ClientCookieDecoder.LAX.decode("JSESSIONID=FOO; Domain=.foo.com")); store.add(Uri.create("http://sub.foo.com"), ClientCookieDecoder.LAX.decode("JSESSIONID=BAR; Domain=sub.foo.com")); Uri uri1 = Uri.create("http://sub.foo.com"); List<Cookie> cookies1 = store.get(uri1); assertTrue(cookies1.size() == 2); assertTrue(cookies1.stream().filter(c -> c.value().equals("FOO") || c.value().equals("BAR")).count() == 2); String result = ClientCookieEncoder.LAX.encode(cookies1.get(0), cookies1.get(1)); assertTrue(result.equals("JSESSIONID=FOO; JSESSIONID=BAR")); }
private void handleMultipleCookieOfSameNameOnDifferentPaths() { CookieStore store = new ThreadSafeCookieStore(); store.add(Uri.create("http://www.foo.com"), ClientCookieDecoder.LAX.decode("cookie=VALUE0; path=/")); store.add(Uri.create("http://www.foo.com/foo/bar"), ClientCookieDecoder.LAX.decode("cookie=VALUE1; path=/foo/bar/")); store.add(Uri.create("http://www.foo.com/foo/baz"), ClientCookieDecoder.LAX.decode("cookie=VALUE2; path=/foo/baz/")); Uri uri1 = Uri.create("http://www.foo.com/foo/bar/"); List<Cookie> cookies1 = store.get(uri1); assertTrue(cookies1.size() == 2); assertTrue(cookies1.stream().filter(c -> c.value().equals("VALUE0") || c.value().equals("VALUE1")).count() == 2); Uri uri2 = Uri.create("http://www.foo.com/foo/baz/"); List<Cookie> cookies2 = store.get(uri2); assertTrue(cookies2.size() == 2); assertTrue(cookies2.stream().filter(c -> c.value().equals("VALUE0") || c.value().equals("VALUE2")).count() == 2); }
private void cookieWithSameNameMustCoexistIfSetOnDifferentDomains() { CookieStore store = new ThreadSafeCookieStore(); Uri uri1 = Uri.create("http://www.foo.com"); store.add(uri1, ClientCookieDecoder.LAX.decode("ALPHA=VALUE1; Domain=www.foo.com")); Uri uri2 = Uri.create("http://www.bar.com"); store.add(uri2, ClientCookieDecoder.LAX.decode("ALPHA=VALUE2; Domain=www.bar.com")); assertTrue(store.get(uri1).size() == 1); assertTrue(store.get(uri1).get(0).value().equals("VALUE1")); assertTrue(store.get(uri2).size() == 1); assertTrue(store.get(uri2).get(0).value().equals("VALUE2")); }
private void handleTrailingSlashesInPaths() { CookieStore store = new ThreadSafeCookieStore(); store.add( Uri.create("https://vagrant.moolb.com/app/consumer/j_spring_cas_security_check?ticket=ST-5-Q7gzqPpvG3N3Bb02bm3q-llinder-vagrantmgr.moolb.com"), ClientCookieDecoder.LAX.decode("JSESSIONID=211D17F016132BCBD31D9ABB31D90960; Path=/app/consumer/; HttpOnly")); assertTrue(store.getAll().size() == 1); assertTrue(store.get(Uri.create("https://vagrant.moolb.com/app/consumer/")).get(0).value().equals("211D17F016132BCBD31D9ABB31D90960")); }
private void replaceCookieWhenSetOnSameDomainAndPath() { CookieStore store = new ThreadSafeCookieStore(); Uri uri = Uri.create("http://www.foo.com/bar/baz"); store.add(uri, ClientCookieDecoder.LAX.decode("ALPHA=VALUE1; Domain=www.foo.com; path=/bar")); store.add(uri, ClientCookieDecoder.LAX.decode("ALPHA=VALUE2; Domain=www.foo.com; path=/bar")); assertTrue(store.getAll().size() == 1); assertTrue(store.get(uri).get(0).value().equals("VALUE2")); }
private void handleCookieNameInCaseInsensitiveManner() { CookieStore store = new ThreadSafeCookieStore(); Uri uri = Uri.create("http://www.foo.com/bar/baz"); store.add(uri, ClientCookieDecoder.LAX.decode("ALPHA=VALUE1; Domain=www.foo.com; path=/bar")); store.add(uri, ClientCookieDecoder.LAX.decode("alpha=VALUE2; Domain=www.foo.com; path=/bar")); assertTrue(store.getAll().size() == 1); assertTrue(store.get(uri).get(0).value().equals("VALUE2")); }
private void replaceCookieWhenSetOnSamePathBySameUri() { CookieStore store = new ThreadSafeCookieStore(); Uri uri = Uri.create("https://foo.org/"); store.add(uri, ClientCookieDecoder.LAX.decode("cookie1=VALUE1; Path=/")); store.add(uri, ClientCookieDecoder.LAX.decode("cookie1=VALUE2; Path=/")); store.add(uri, ClientCookieDecoder.LAX.decode("cookie1=VALUE3; Path=/")); assertTrue(store.getAll().size() == 1); assertTrue(store.get(uri).get(0).value().equals("VALUE3")); }
private void shouldServeCookiesBasedOnTheUriScheme() { CookieStore store = new ThreadSafeCookieStore(); store.add(Uri.create("https://foo.org/moodle/"), ClientCookieDecoder.LAX.decode("cookie1=VALUE1; Path=/")); store.add(Uri.create("https://foo.org:443/moodle/login"), ClientCookieDecoder.LAX.decode("cookie1=VALUE2; Path=/")); store.add(Uri.create("https://foo.org:443/moodle/login"), ClientCookieDecoder.LAX.decode("cookie1=VALUE3; Path=/; Secure")); Uri uri = Uri.create("https://foo.org/moodle/login"); assertTrue(store.getAll().size() == 1); assertTrue(store.get(uri).get(0).value().equals("VALUE3")); assertTrue(store.get(uri).get(0).isSecure()); }
@Test public void should_set_and_recognize_cookie() throws IOException { runWithConfiguration("cookie.json"); Cookie decodeCookie = getCookie("/cookie"); assertThat(decodeCookie.name(), is("login")); assertThat(decodeCookie.value(), is("true")); }
private void shouldServeSecureCookiesForSpecificallyRetrievedHttpUriScheme() { CookieStore store = new ThreadSafeCookieStore(); store.add(Uri.create("https://foo.org/moodle/"), ClientCookieDecoder.LAX.decode("cookie1=VALUE1; Path=/")); store.add(Uri.create("https://foo.org:443/moodle/login"), ClientCookieDecoder.LAX.decode("cookie1=VALUE2; Path=/")); store.add(Uri.create("https://foo.org:443/moodle/login"), ClientCookieDecoder.LAX.decode("cookie1=VALUE3; Path=/; Secure")); Uri uri = Uri.create("https://foo.org/moodle/login"); assertTrue(store.get(uri).size() == 1); assertTrue(store.get(uri).get(0).value().equals("VALUE3")); assertTrue(store.get(uri).get(0).isSecure()); } }
private void shouldAlsoServeNonSecureCookiesBasedOnTheUriScheme() { CookieStore store = new ThreadSafeCookieStore(); store.add(Uri.create("https://foo.org/moodle/"), ClientCookieDecoder.LAX.decode("cookie1=VALUE1; Path=/")); store.add(Uri.create("https://foo.org:443/moodle/login"), ClientCookieDecoder.LAX.decode("cookie1=VALUE2; Path=/")); store.add(Uri.create("https://foo.org:443/moodle/login"), ClientCookieDecoder.LAX.decode("cookie1=VALUE3; Path=/; HttpOnly")); Uri uri = Uri.create("https://foo.org/moodle/login"); assertTrue(store.getAll().size() == 1); assertTrue(store.get(uri).get(0).value().equals("VALUE3")); assertTrue(!store.get(uri).get(0).isSecure()); }
@Test public void should_set_and_recognize_cookie_with_secure() throws IOException { runWithConfiguration("cookie.json"); Cookie decodeCookie = getCookie("/cookie-with-secure"); assertThat(decodeCookie.name(), is("login")); assertThat(decodeCookie.value(), is("true")); assertThat(decodeCookie.isSecure(), is(true)); }
@Test public void should_set_and_recognize_cookie_with_domain() throws IOException { runWithConfiguration("cookie.json"); Cookie decodeCookie = getCookie("/cookie-with-domain"); assertThat(decodeCookie.name(), is("login")); assertThat(decodeCookie.value(), is("true")); assertThat(decodeCookie.domain(), is("github.com")); }
/** * Parse netty cookie to {@link Cookie}. * * @param nettyCookie netty raw cookie instance */ private void parseCookie(io.netty.handler.codec.http.cookie.Cookie nettyCookie) { var cookie = new Cookie(); cookie.name(nettyCookie.name()); cookie.value(nettyCookie.value()); cookie.httpOnly(nettyCookie.isHttpOnly()); cookie.path(nettyCookie.path()); cookie.domain(nettyCookie.domain()); cookie.maxAge(nettyCookie.maxAge()); this.cookies.put(cookie.name(), cookie); }