diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java index 960b609358..0565f2693d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java @@ -41,12 +41,11 @@ import java.util.regex.Pattern; */ public class CookieDecoder { - private static final Pattern PATTERN = - Pattern.compile( - // See: https://github.com/netty/netty/pull/96 - //"(?:\\s|[;,])*\\$*([^;=]+)(?:=(?:[\"']((?:\\\\.|[^\"])*)[\"']|([^;,]*)))?(\\s*(?:[;,]+\\s*|$))" - "(?:\\s|[;,])*\\$*([^;=]+)(?:=(?:[\"']((?:\\\\.|[^\"])*)[\"']|([^;]*)))?(\\s*(?:[;,]+\\s*|$))" - ); + private static final Pattern PATTERN = Pattern.compile( + // See: https://github.com/netty/netty/pull/96 + //"(?:\\s|[;,])*\\$*([^;=]+)(?:=(?:[\"']((?:\\\\.|[^\"])*)[\"']|([^;,]*)))?(\\s*(?:[;,]+\\s*|$))" + "(?:\\s|[;,])*\\$*([^;=]+)(?:=(?:[\"']((?:\\\\.|[^\"])*)[\"']|([^;]*)))?(\\s*(?:[;,]+\\s*|$))" + ); private static final String COMMA = ","; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java index 4ad856dc0e..a1acd5a4a6 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java @@ -68,7 +68,7 @@ public class CookieEncoder { * this encoder. */ public void addCookie(String name, String value) { - cookies.add(new DefaultCookie(name, value)); + addCookie(new DefaultCookie(name, value)); } /** @@ -98,6 +98,11 @@ public class CookieEncoder { } private String encodeServerSide() { + if (cookies.size() > 1) { + throw new IllegalStateException( + "encode() can encode only one cookie on server mode: " + cookies.size() + " cookies added"); + } + StringBuilder sb = new StringBuilder(); for (Cookie cookie: cookies) { diff --git a/example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java b/example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java index c0e201ed46..cb08c3e0bc 100644 --- a/example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java +++ b/example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java @@ -144,9 +144,16 @@ public class HttpSnoopServerHandler extends ChannelInboundMessageHandlerAdapter< CookieEncoder cookieEncoder = new CookieEncoder(true); for (Cookie cookie : cookies) { cookieEncoder.addCookie(cookie); + response.addHeader(SET_COOKIE, cookieEncoder.encode()); } - response.addHeader(SET_COOKIE, cookieEncoder.encode()); } + } else { + // Browser sent no cookie. Add some. + CookieEncoder cookieEncoder = new CookieEncoder(true); + cookieEncoder.addCookie("key1", "value1"); + response.addHeader(SET_COOKIE, cookieEncoder.encode()); + cookieEncoder.addCookie("key2", "value2"); + response.addHeader(SET_COOKIE, cookieEncoder.encode()); } // Write the response.