List of usage examples for io.netty.handler.codec.http DefaultHttpHeaders DefaultHttpHeaders
protected DefaultHttpHeaders(DefaultHeaders<CharSequence, CharSequence, ?> headers)
From source file:com.github.ambry.rest.NettyRequestTest.java
License:Open Source License
/** * Tests conversion of {@link HttpRequest} to {@link NettyRequest} given good input. * @throws RestServiceException/*from w w w . ja v a 2 s . com*/ */ @Test public void conversionWithGoodInputTest() throws RestServiceException { // headers HttpHeaders headers = new DefaultHttpHeaders(false); headers.add(HttpHeaders.Names.CONTENT_LENGTH, new Random().nextInt(Integer.MAX_VALUE)); headers.add("headerKey", "headerValue1"); headers.add("headerKey", "headerValue2"); headers.add("overLoadedKey", "headerOverloadedValue"); headers.add("paramNoValueInUriButValueInHeader", "paramValueInHeader"); headers.add("headerNoValue", (Object) null); headers.add("headerNoValueButValueInUri", (Object) null); // params Map<String, List<String>> params = new HashMap<String, List<String>>(); List<String> values = new ArrayList<String>(2); values.add("paramValue1"); values.add("paramValue2"); params.put("paramKey", values); values = new ArrayList<String>(1); values.add("paramOverloadedValue"); params.put("overLoadedKey", values); values = new ArrayList<String>(1); values.add("headerValueInUri"); params.put("headerNoValueButValueInUri", values); params.put("paramNoValue", null); params.put("paramNoValueInUriButValueInHeader", null); StringBuilder uriAttachmentBuilder = new StringBuilder("?"); for (Map.Entry<String, List<String>> param : params.entrySet()) { if (param.getValue() != null) { for (String value : param.getValue()) { uriAttachmentBuilder.append(param.getKey()).append("=").append(value).append("&"); } } else { uriAttachmentBuilder.append(param.getKey()).append("&"); } } uriAttachmentBuilder.deleteCharAt(uriAttachmentBuilder.length() - 1); String uriAttachment = uriAttachmentBuilder.toString(); NettyRequest nettyRequest; String uri; Set<Cookie> cookies = new HashSet<Cookie>(); Cookie httpCookie = new DefaultCookie("CookieKey1", "CookieValue1"); cookies.add(httpCookie); httpCookie = new DefaultCookie("CookieKey2", "CookieValue2"); cookies.add(httpCookie); headers.add(RestUtils.Headers.COOKIE, getCookiesHeaderValue(cookies)); uri = "/GET" + uriAttachment; nettyRequest = createNettyRequest(HttpMethod.GET, uri, headers); validateRequest(nettyRequest, RestMethod.GET, uri, headers, params, cookies); closeRequestAndValidate(nettyRequest); uri = "/POST" + uriAttachment; nettyRequest = createNettyRequest(HttpMethod.POST, uri, headers); validateRequest(nettyRequest, RestMethod.POST, uri, headers, params, cookies); closeRequestAndValidate(nettyRequest); uri = "/DELETE" + uriAttachment; nettyRequest = createNettyRequest(HttpMethod.DELETE, uri, headers); validateRequest(nettyRequest, RestMethod.DELETE, uri, headers, params, cookies); closeRequestAndValidate(nettyRequest); uri = "/HEAD" + uriAttachment; nettyRequest = createNettyRequest(HttpMethod.HEAD, uri, headers); validateRequest(nettyRequest, RestMethod.HEAD, uri, headers, params, cookies); closeRequestAndValidate(nettyRequest); }
From source file:org.asynchttpclient.netty.handler.intercept.ProxyUnauthorized407Interceptor.java
License:Open Source License
public boolean exitAfterHandling407(// Channel channel, // NettyResponseFuture<?> future, // HttpResponse response, // Request request, // int statusCode, // ProxyServer proxyServer, // HttpRequest httpRequest) {/* w ww. jav a2 s. c o m*/ if (future.getInProxyAuth().getAndSet(true)) { LOGGER.info("Can't handle 407 as auth was already performed"); return false; } Realm proxyRealm = future.getProxyRealm(); if (proxyRealm == null) { LOGGER.info("Can't handle 407 as there's no proxyRealm"); return false; } List<String> proxyAuthHeaders = response.headers().getAll(HttpHeaders.Names.PROXY_AUTHENTICATE); if (proxyAuthHeaders.isEmpty()) { LOGGER.info("Can't handle 407 as response doesn't contain Proxy-Authenticate headers"); return false; } // FIXME what's this??? future.setChannelState(ChannelState.NEW); HttpHeaders requestHeaders = new DefaultHttpHeaders(false).add(request.getHeaders()); switch (proxyRealm.getScheme()) { case BASIC: if (getHeaderWithPrefix(proxyAuthHeaders, "Basic") == null) { LOGGER.info("Can't handle 407 with Basic realm as Proxy-Authenticate headers don't match"); return false; } if (proxyRealm.isUsePreemptiveAuth()) { // FIXME do we need this, as future.getAndSetAuth // was tested above? // auth was already performed, most likely auth // failed LOGGER.info("Can't handle 407 with Basic realm as auth was preemptive and already performed"); return false; } // FIXME do we want to update the realm, or directly // set the header? Realm newBasicRealm = realm(proxyRealm)// .setUsePreemptiveAuth(true)// .build(); future.setProxyRealm(newBasicRealm); break; case DIGEST: String digestHeader = getHeaderWithPrefix(proxyAuthHeaders, "Digest"); if (digestHeader == null) { LOGGER.info("Can't handle 407 with Digest realm as Proxy-Authenticate headers don't match"); return false; } Realm newDigestRealm = realm(proxyRealm)// .setUri(request.getUri())// .setMethodName(request.getMethod())// .setUsePreemptiveAuth(true)// .parseProxyAuthenticateHeader(digestHeader)// .build(); future.setProxyRealm(newDigestRealm); break; case NTLM: String ntlmHeader = getHeaderWithPrefix(proxyAuthHeaders, "NTLM"); if (ntlmHeader == null) { LOGGER.info("Can't handle 407 with NTLM realm as Proxy-Authenticate headers don't match"); return false; } ntlmProxyChallenge(ntlmHeader, request, requestHeaders, proxyRealm, future); Realm newNtlmRealm = realm(proxyRealm)// .setUsePreemptiveAuth(true)// .build(); future.setProxyRealm(newNtlmRealm); break; case KERBEROS: case SPNEGO: if (getHeaderWithPrefix(proxyAuthHeaders, NEGOTIATE) == null) { LOGGER.info( "Can't handle 407 with Kerberos or Spnego realm as Proxy-Authenticate headers don't match"); return false; } try { kerberosProxyChallenge(channel, proxyAuthHeaders, request, proxyServer, proxyRealm, requestHeaders, future); } catch (SpnegoEngineException e) { // FIXME String ntlmHeader2 = getHeaderWithPrefix(proxyAuthHeaders, "NTLM"); if (ntlmHeader2 != null) { LOGGER.warn("Kerberos/Spnego proxy auth failed, proceeding with NTLM"); ntlmProxyChallenge(ntlmHeader2, request, requestHeaders, proxyRealm, future); Realm newNtlmRealm2 = realm(proxyRealm)// .setScheme(AuthScheme.NTLM)// .setUsePreemptiveAuth(true)// .build(); future.setProxyRealm(newNtlmRealm2); } else { requestSender.abort(channel, future, e); return false; } } break; default: throw new IllegalStateException("Invalid Authentication scheme " + proxyRealm.getScheme()); } RequestBuilder nextRequestBuilder = new RequestBuilder(future.getCurrentRequest()) .setHeaders(requestHeaders); if (future.getCurrentRequest().getUri().isSecured()) { nextRequestBuilder.setMethod(CONNECT); } final Request nextRequest = nextRequestBuilder.build(); LOGGER.debug("Sending proxy authentication to {}", request.getUri()); if (future.isKeepAlive()// && !HttpHeaders.isTransferEncodingChunked(httpRequest)// && !HttpHeaders.isTransferEncodingChunked(response)) { future.setConnectAllowed(true); future.setReuseChannel(true); requestSender.drainChannelAndExecuteNextRequest(channel, future, nextRequest); } else { channelManager.closeChannel(channel); requestSender.sendNextRequest(nextRequest, future); } return true; }
From source file:org.asynchttpclient.netty.handler.intercept.Unauthorized401Interceptor.java
License:Open Source License
public boolean exitAfterHandling401(// final Channel channel, // final NettyResponseFuture<?> future, // HttpResponse response, // final Request request, // int statusCode, // Realm realm, // ProxyServer proxyServer, // HttpRequest httpRequest) {//from ww w. j a va 2 s .c o m if (realm == null) { LOGGER.info("Can't handle 401 as there's no realm"); return false; } if (future.getInAuth().getAndSet(true)) { LOGGER.info("Can't handle 401 as auth was already performed"); return false; } List<String> wwwAuthHeaders = response.headers().getAll(WWW_AUTHENTICATE); if (wwwAuthHeaders.isEmpty()) { LOGGER.info("Can't handle 401 as response doesn't contain WWW-Authenticate headers"); return false; } // FIXME what's this??? future.setChannelState(ChannelState.NEW); HttpHeaders requestHeaders = new DefaultHttpHeaders(false).add(request.getHeaders()); switch (realm.getScheme()) { case BASIC: if (getHeaderWithPrefix(wwwAuthHeaders, "Basic") == null) { LOGGER.info("Can't handle 401 with Basic realm as WWW-Authenticate headers don't match"); return false; } if (realm.isUsePreemptiveAuth()) { // FIXME do we need this, as future.getAndSetAuth // was tested above? // auth was already performed, most likely auth // failed LOGGER.info("Can't handle 401 with Basic realm as auth was preemptive and already performed"); return false; } // FIXME do we want to update the realm, or directly // set the header? Realm newBasicRealm = realm(realm)// .setUsePreemptiveAuth(true)// .build(); future.setRealm(newBasicRealm); break; case DIGEST: String digestHeader = getHeaderWithPrefix(wwwAuthHeaders, "Digest"); if (digestHeader == null) { LOGGER.info("Can't handle 401 with Digest realm as WWW-Authenticate headers don't match"); return false; } Realm newDigestRealm = realm(realm)// .setUri(request.getUri())// .setMethodName(request.getMethod())// .setUsePreemptiveAuth(true)// .parseWWWAuthenticateHeader(digestHeader)// .build(); future.setRealm(newDigestRealm); break; case NTLM: String ntlmHeader = getHeaderWithPrefix(wwwAuthHeaders, "NTLM"); if (ntlmHeader == null) { LOGGER.info("Can't handle 401 with NTLM realm as WWW-Authenticate headers don't match"); return false; } ntlmChallenge(ntlmHeader, request, requestHeaders, realm, future); Realm newNtlmRealm = realm(realm)// .setUsePreemptiveAuth(true)// .build(); future.setRealm(newNtlmRealm); break; case KERBEROS: case SPNEGO: if (getHeaderWithPrefix(wwwAuthHeaders, NEGOTIATE) == null) { LOGGER.info( "Can't handle 401 with Kerberos or Spnego realm as WWW-Authenticate headers don't match"); return false; } try { kerberosChallenge(channel, wwwAuthHeaders, request, requestHeaders, realm, future); } catch (SpnegoEngineException e) { // FIXME String ntlmHeader2 = getHeaderWithPrefix(wwwAuthHeaders, "NTLM"); if (ntlmHeader2 != null) { LOGGER.warn("Kerberos/Spnego auth failed, proceeding with NTLM"); ntlmChallenge(ntlmHeader2, request, requestHeaders, realm, future); Realm newNtlmRealm2 = realm(realm)// .setScheme(AuthScheme.NTLM)// .setUsePreemptiveAuth(true)// .build(); future.setRealm(newNtlmRealm2); } else { requestSender.abort(channel, future, e); return false; } } break; default: throw new IllegalStateException("Invalid Authentication scheme " + realm.getScheme()); } final Request nextRequest = new RequestBuilder(future.getCurrentRequest()).setHeaders(requestHeaders) .build(); LOGGER.debug("Sending authentication to {}", request.getUri()); if (future.isKeepAlive()// && !HttpHeaders.isTransferEncodingChunked(httpRequest)// && !HttpHeaders.isTransferEncodingChunked(response)) { future.setReuseChannel(true); requestSender.drainChannelAndExecuteNextRequest(channel, future, nextRequest); } else { channelManager.closeChannel(channel); requestSender.sendNextRequest(nextRequest, future); } return true; }
From source file:org.asynchttpclient.netty.request.NettyRequestSender.java
License:Open Source License
private void configureTransferAdapter(AsyncHandler<?> handler, HttpRequest httpRequest) { HttpHeaders h = new DefaultHttpHeaders(false).set(httpRequest.headers()); TransferCompletionHandler.class.cast(handler).headers(h); }
From source file:org.asynchttpclient.RequestBuilderBase.java
License:Apache License
protected RequestBuilderBase(String method, boolean disableUrlEncoding, boolean validateHeaders) { this.method = method; this.uriEncoder = UriEncoder.uriEncoder(disableUrlEncoding); this.headers = new DefaultHttpHeaders(validateHeaders); }
From source file:org.asynchttpclient.RequestBuilderBase.java
License:Apache License
protected RequestBuilderBase(Request prototype, boolean disableUrlEncoding, boolean validateHeaders) { this.method = prototype.getMethod(); this.uriEncoder = UriEncoder.uriEncoder(disableUrlEncoding); this.uri = prototype.getUri(); this.address = prototype.getAddress(); this.localAddress = prototype.getLocalAddress(); this.headers = new DefaultHttpHeaders(validateHeaders); this.headers.add(prototype.getHeaders()); if (isNonEmpty(prototype.getCookies())) { this.cookies = new ArrayList<>(prototype.getCookies()); }//from w ww.jav a2s . com this.byteData = prototype.getByteData(); this.compositeByteData = prototype.getCompositeByteData(); this.stringData = prototype.getStringData(); this.byteBufferData = prototype.getByteBufferData(); this.streamData = prototype.getStreamData(); this.bodyGenerator = prototype.getBodyGenerator(); if (isNonEmpty(prototype.getFormParams())) { this.formParams = new ArrayList<>(prototype.getFormParams()); } if (isNonEmpty(prototype.getBodyParts())) { this.bodyParts = new ArrayList<>(prototype.getBodyParts()); } this.virtualHost = prototype.getVirtualHost(); this.proxyServer = prototype.getProxyServer(); this.realm = prototype.getRealm(); this.file = prototype.getFile(); this.followRedirect = prototype.getFollowRedirect(); this.requestTimeout = prototype.getRequestTimeout(); this.rangeOffset = prototype.getRangeOffset(); this.charset = prototype.getCharset(); this.channelPoolPartitioning = prototype.getChannelPoolPartitioning(); this.nameResolver = prototype.getNameResolver(); }
From source file:org.jooby.internal.netty.NettyPush.java
License:Apache License
@Override public void push(final String method, final String path, final Map<String, Object> headers) { ctx.channel().eventLoop().execute(() -> { AsciiString streamIdHeader = HttpConversionUtil.ExtensionHeaderNames.STREAM_ID.text(); Http2Connection connection = encoder.connection(); int nextStreamId = connection.local().incrementAndGetNextStreamId(); Http2Headers h2headers = new DefaultHttp2Headers().path(path).method(method).authority(authority) .scheme(scheme);//from ww w .j a v a2s . c om headers.forEach((n, v) -> h2headers.add(n, v.toString())); encoder.writePushPromise(ctx, streamId, nextStreamId, h2headers, 0, ctx.newPromise()); // TODO: Is there another way of handling a push promise? DefaultFullHttpRequest pushRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(method.toUpperCase()), path, Unpooled.EMPTY_BUFFER, new DefaultHttpHeaders(false).set(streamIdHeader, nextStreamId), EmptyHttpHeaders.INSTANCE); ctx.pipeline().fireChannelRead(pushRequest); ctx.pipeline().fireChannelReadComplete(); }); }
From source file:ratpack.server.internal.NettyHandlerAdapter.java
License:Apache License
public void channelRead0(final ChannelHandlerContext ctx, final FullHttpRequest nettyRequest) throws Exception { if (!nettyRequest.decoderResult().isSuccess()) { sendError(ctx, HttpResponseStatus.BAD_REQUEST); nettyRequest.release();/*from w w w .j a va 2s .c o m*/ return; } final Channel channel = ctx.channel(); InetSocketAddress remoteAddress = (InetSocketAddress) channel.remoteAddress(); InetSocketAddress socketAddress = (InetSocketAddress) channel.localAddress(); final ServerConfig serverConfig = rootRegistry.get(ServerConfig.class); final Request request = new DefaultRequest(new NettyHeadersBackedHeaders(nettyRequest.headers()), nettyRequest.method(), nettyRequest.uri(), remoteAddress, socketAddress, nettyRequest.content()); final HttpHeaders nettyHeaders = new DefaultHttpHeaders(false); final MutableHeaders responseHeaders = new NettyHeadersBackedMutableHeaders(nettyHeaders); final DefaultEventController<RequestOutcome> requestOutcomeEventController = new DefaultEventController<>(); final AtomicBoolean transmitted = new AtomicBoolean(false); final DefaultResponseTransmitter responseTransmitter = new DefaultResponseTransmitter(transmitted, execControl, channel, nettyRequest, request, nettyHeaders, requestOutcomeEventController); ctx.attr(RESPONSE_TRANSMITTER_ATTRIBUTE_KEY).set(responseTransmitter); Action<Action<Object>> subscribeHandler = thing -> { transmitted.set(true); ctx.attr(CHANNEL_SUBSCRIBER_ATTRIBUTE_KEY).set(thing); }; final DirectChannelAccess directChannelAccess = new DefaultDirectChannelAccess(channel, subscribeHandler); final DefaultContext.RequestConstants requestConstants = new DefaultContext.RequestConstants( applicationConstants, request, directChannelAccess, requestOutcomeEventController.getRegistry()); final Response response = new DefaultResponse(execControl, responseHeaders, ctx.alloc(), responseTransmitter, requestConstants); requestConstants.response = response; DefaultContext.start(channel.eventLoop(), execController.getControl(), requestConstants, rootRegistry, handlers, execution -> { if (!transmitted.get()) { Handler lastHandler = requestConstants.handler; StringBuilder description = new StringBuilder(); description.append("No response sent for ").append(request.getMethod().getName()) .append(" request to ").append(request.getUri()).append(" (last handler: "); if (lastHandler instanceof DescribingHandler) { ((DescribingHandler) lastHandler).describeTo(description); } else { DescribingHandlers.describeTo(lastHandler, description); } description.append(")"); String message = description.toString(); LOGGER.warn(message); response.status(500); if (serverConfig.isDevelopment()) { response.send(message); } else { response.send(); } } }); }