下面列出了怎么用 io.netty.handler.codec.http.Cookie 的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest request) throws Exception {
if (!request.getDecoderResult().isSuccess()) {
sendError(ctx, BAD_REQUEST);
return;
}
String uri = request.getUri();
QueryStringDecoder decoder = new QueryStringDecoder(uri);
SimpleHttpRequest req = new SimpleHttpRequest(decoder.path(), decoder.parameters());
String cookieString = request.headers().get(HttpHeaders.Names.COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
req.setCookies(cookies);
} else {
req.setCookies(Collections.emptySet());
}
req.setHeaders(request.headers());
copyHttpBodyData(request, req);
SimpleHttpResponse resp = eventHandler.apply(req);
ctx.write( HttpEventHandler.buildHttpResponse(resp.toString(), resp.getStatus(), resp.getContentType()) );
ctx.flush().close();
}
void copyToServletCookie(FullHttpRequest fullHttpReq, MockHttpServletRequest servletRequest){
String cookieString = fullHttpReq.headers().get(HttpHeaders.Names.COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
javax.servlet.http.Cookie[] sCookies = new javax.servlet.http.Cookie[cookies.size()];
int i = 0;
for (Cookie cookie: cookies) {
javax.servlet.http.Cookie sCookie = new javax.servlet.http.Cookie(cookie.getName(), cookie.getValue());
sCookie.setPath(cookie.getPath());
sCookie.setMaxAge((int) cookie.getMaxAge());
sCookies[i++] = sCookie;
}
servletRequest.setCookies(sCookies);
}
} else {
servletRequest.setCookies( new javax.servlet.http.Cookie[0]);
}
}
void setCookie(HttpRequest request, FullHttpResponse response) {
// Encode the cookie.
String cookieString = request.headers().get(COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
for (Cookie cookie: cookies) {
if("visit-count".equals(cookie.getName())) {
int count = Integer.parseInt(cookie.getValue()) ;
cookie.setValue(Integer.toString(count + 1));
//System.out.println("Visit: " + count);
}
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
}
}
} else {
// Browser sent no cookie. Add some.
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("id", UUID.randomUUID().toString()));
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("visit-count", "1"));
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("first-visit-time", new Date().toString()));
}
}
@Override
public Cookies reParseCookies()
{
Cookies cookies = new Cookies();
for (String aCookieHeader : getHeaders().getAll(HttpHeaderNames.COOKIE))
{
try {
if (CLEAN_COOKIES.get()) {
aCookieHeader = cleanCookieHeader(aCookieHeader);
}
Set<Cookie> decoded = CookieDecoder.decode(aCookieHeader, false);
for (Cookie cookie : decoded) {
cookies.add(cookie);
}
}
catch (Exception e) {
LOG.error(String.format("Error parsing request Cookie header. cookie=%s, request-info=%s",
aCookieHeader, getInfoForLogging()));
}
}
parsedCookies = cookies;
return cookies;
}
private void decodeCookies() {
List<String> values = response.headers().getAll(HttpHeaders.Names.SET_COOKIE);
cookies = new HashMap<>(values.size());
for (String value : values) {
Set<Cookie> setOfCookies = CookieDecoder.decode(value);
for(Cookie cookie: setOfCookies) {
cookies.put(cookie.getName(), cookie.getValue());
}
}
}
private void addCookies(Map<String, String> cookies) {
if (cookies != null && cookies.size() > 0) {
List<Cookie> cookieList = new ArrayList<>();
for (String name : cookies.keySet()) {
cookieList.add(new DefaultCookie(name, cookies.get(name)));
}
request.headers().set(HttpHeaders.Names.COOKIE, ClientCookieEncoder.encode(cookieList));
}
}
public static Collection<Cookie> getCookies(String name, HttpRequest request) {
String cookieString = request.headers().get(COOKIE);
if (cookieString != null) {
List<Cookie> foundCookie = new ArrayList<Cookie>();
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) foundCookie.add(cookie);
}
return foundCookie;
}
return null;
}
public static final Collection<Cookie> getCookies(String name, HttpResponse response) {
String cookieString = response.headers().get(COOKIE);
if (cookieString != null) {
List<Cookie> foundCookie = new ArrayList<Cookie>();
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
foundCookie.add(cookie);
}
}
return foundCookie;
}
return null;
}
private boolean writeResponse(HttpObject currentObj, ChannelHandlerContext ctx) {
// Decide whether to close the connection or not.
boolean keepAlive = HttpHeaders.isKeepAlive(request);
// Build the response object.
FullHttpResponse response = new DefaultFullHttpResponse(
HTTP_1_1, currentObj.getDecoderResult().isSuccess()? OK : BAD_REQUEST,
Unpooled.copiedBuffer(buf.toString(), CharsetUtil.UTF_8));
response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
if (keepAlive) {
// Add 'Content-Length' header only for a keep-alive connection.
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
// Add keep alive header as per:
// - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
}
// Encode the cookie.
String cookieString = request.headers().get(COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
for (Cookie cookie: cookies) {
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
}
}
} else {
// Browser sent no cookie. Add some.
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key1", "value1"));
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key2", "value2"));
}
// Write the response.
ctx.write(response);
return keepAlive;
}
private boolean writeResponse(HttpObject currentObj, ChannelHandlerContext ctx) {
// Decide whether to close the connection or not.
boolean keepAlive = HttpHeaders.isKeepAlive(request);
// Build the response object.
FullHttpResponse response = new DefaultFullHttpResponse(
HTTP_1_1, currentObj.decoderResult().isSuccess()? OK : BAD_REQUEST,
Unpooled.copiedBuffer(buf.toString(), CharsetUtil.UTF_8));
response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
if (keepAlive) {
// Add 'Content-Length' header only for a keep-alive connection.
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
// Add keep alive header as per:
// - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
}
// Encode the cookie.
String cookieString = request.headers().get(COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
for (Cookie cookie: cookies) {
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
}
}
} else {
// Browser sent no cookie. Add some.
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key1", "value1"));
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key2", "value2"));
}
// Write the response.
ctx.write(response);
return keepAlive;
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
public HttpRequestData(HttpRequestEvent event){
HttpHeaders headers = event.getRequest().headers();
String refererUrl = NettyHttpUtil.getRefererUrl(headers);
String userAgent = headers.get(USER_AGENT);
String cookieString = headers.get(COOKIE);
Map<String, String> cookiesMap = null;
if (cookieString != null) {
try {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
int z = cookies.size();
if (z > 0) {
cookiesMap = new HashMap<>(z);
for (Cookie cookie : cookies) {
cookiesMap.put(cookie.getName(), cookie.getValue());
}
} else {
cookiesMap = new HashMap<>(0);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("--cookie: "+cookieString);
}
}
set(userAgent, refererUrl, event.getParams(), cookiesMap);
//System.out.println(cookieString + " request COOKIE " + cookies );
}
@Override
public String getCookie(final String cookieName) {
if (cookies == null) {
populateCookies();
}
final Cookie cookie = cookies.get(cookieName);
return cookie != null ? cookie.getValue() : null;
}
private void populateCookies() {
cookies = Maps.newHashMap();
final String cookieHeaderValue = inner.headers().get("Cookie");
if (cookieHeaderValue == null) return;
final Set<Cookie> cookiesSet = CookieDecoder.decode(cookieHeaderValue, false);
for (final Cookie cookie : cookiesSet) {
cookies.put(cookie.getName(), cookie);
}
}
@Override
protected PushUserAuth doAuth(FullHttpRequest req) {
final Cookies cookies = parseCookies(req);
for (final Cookie c : cookies.getAll()) {
if(c.getName().equals("userAuthCookie")) {
final String customerId = c.getValue();
if (!Strings.isNullOrEmpty(customerId)) {
return new SamplePushUserAuth(customerId);
}
}
}
return new SamplePushUserAuth(HttpResponseStatus.UNAUTHORIZED.code());
}
@Override
public Cookies parseSetCookieHeader(String setCookieValue)
{
Cookies cookies = new Cookies();
for (Cookie cookie : CookieDecoder.decode(setCookieValue)) {
cookies.add(cookie);
}
return cookies;
}
@Override
public boolean hasSetCookieWithName(String cookieName)
{
boolean has = false;
for (String setCookieValue : getHeaders().getAll(HttpHeaderNames.SET_COOKIE)) {
for (Cookie cookie : CookieDecoder.decode(setCookieValue)) {
if (cookie.getName().equalsIgnoreCase(cookieName)) {
has = true;
break;
}
}
}
return has;
}
public void add(Cookie cookie)
{
List<Cookie> existing = map.get(cookie.getName());
if (existing == null) {
existing = new ArrayList<>();
map.put(cookie.getName(), existing);
}
existing.add(cookie);
all.add(cookie);
}
public Cookie getFirst(String name)
{
List<Cookie> found = map.get(name);
if (found == null || found.size() == 0) {
return null;
}
return found.get(0);
}
public String getFirstValue(String name)
{
Cookie c = getFirst(name);
String value;
if (c != null) {
value = c.getValue();
} else {
value = null;
}
return value;
}
private void writeResponse(Channel channel) {
// Convert the response content to a ChannelBuffer.
ByteBuf buf = copiedBuffer(responseContent.toString(), CharsetUtil.UTF_8);
responseContent.setLength(0);
// Decide whether to close the connection or not.
boolean close = HttpHeaders.Values.CLOSE.equalsIgnoreCase(request.headers().get(CONNECTION))
|| request.getProtocolVersion().equals(HttpVersion.HTTP_1_0)
&& !HttpHeaders.Values.KEEP_ALIVE.equalsIgnoreCase(request.headers().get(CONNECTION));
// Build the response object.
FullHttpResponse response = new DefaultFullHttpResponse(
HttpVersion.HTTP_1_1, HttpResponseStatus.OK, buf);
response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
if (!close) {
// There's no need to add 'Content-Length' header
// if this is the last response.
response.headers().set(CONTENT_LENGTH, buf.readableBytes());
}
Set<Cookie> cookies;
String value = request.headers().get(COOKIE);
if (value == null) {
cookies = Collections.emptySet();
} else {
cookies = CookieDecoder.decode(value);
}
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
for (Cookie cookie : cookies) {
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
}
}
// Write the response.
ChannelFuture future = channel.writeAndFlush(response);
// Close the connection after the write operation is done if necessary.
if (close) {
future.addListener(ChannelFutureListener.CLOSE);
}
}
private boolean writeResponse(HttpObject currentObj, ChannelHandlerContext ctx) {
// Decide whether to close the connection or not.
boolean keepAlive = HttpHeaders.isKeepAlive(request);
// Build the response object.
FullHttpResponse response =
new DefaultFullHttpResponse(
HTTP_1_1,
currentObj.getDecoderResult().isSuccess() ? OK : BAD_REQUEST,
Unpooled.copiedBuffer(buf.toString(), CharsetUtil.UTF_8));
response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
if (keepAlive) {
// Add 'Content-Length' header only for a keep-alive connection.
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
// Add keep alive header as per:
// - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
}
// Encode the cookie.
String cookieString = request.headers().get(COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
for (Cookie cookie : cookies) {
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
}
}
} else {
// Browser sent no cookie. Add some.
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key1", "value1"));
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key2", "value2"));
}
// Write the response.
ctx.write(response);
return keepAlive;
}
private boolean writeResponse(HttpObject currentObj, ChannelHandlerContext ctx) {
// Decide whether to close the connection or not.
boolean keepAlive = HttpHeaders.isKeepAlive(request);
// Build the response object.
FullHttpResponse response =
new DefaultFullHttpResponse(
HTTP_1_1,
currentObj.getDecoderResult().isSuccess() ? OK : BAD_REQUEST,
Unpooled.copiedBuffer(buf.toString(), CharsetUtil.UTF_8));
response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
if (keepAlive) {
// Add 'Content-Length' header only for a keep-alive connection.
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
// Add keep alive header as per:
// - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
}
// Encode the cookie.
String cookieString = request.headers().get(COOKIE);
if (cookieString != null) {
Set<Cookie> cookies = CookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
// Reset the cookies if necessary.
for (Cookie cookie : cookies) {
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode(cookie));
}
}
} else {
// Browser sent no cookie. Add some.
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key1", "value1"));
response.headers().add(SET_COOKIE, ServerCookieEncoder.encode("key2", "value2"));
}
// Write the response.
ctx.write(response);
return keepAlive;
}
public Set<Cookie> getCookies() {
return cookies;
}
public void setCookies(Set<Cookie> cookies) {
this.cookies = cookies;
}