List of usage examples for io.netty.handler.codec.http HttpResponseStatus MOVED_PERMANENTLY
HttpResponseStatus MOVED_PERMANENTLY
To view the source code for io.netty.handler.codec.http HttpResponseStatus MOVED_PERMANENTLY.
Click Source Link
From source file:com.bay1ts.bay.core.Response.java
License:Apache License
/** * Trigger a browser redirect//from ww w.j a va2s . com * * @param location Where to redirect */ public void redirect(String location) { this.isRedirected = true; // if (LOG.isDebugEnabled()) { // LOG.debug("Redirecting ({} {} to {}", "Found", HttpServletResponse.SC_FOUND, location); // } // try { response.headers().set("LOCATION", location); response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY); //// TODO: 2016/10/12 // } catch (IOException ioException) { // LOG.warn("Redirect failure", ioException); // } }
From source file:io.knotx.knot.action.ActionKnotProxyImpl.java
License:Apache License
private KnotContext redirectKnotResponse(KnotContext knotContext, FormEntity form, ClientResponse clientResponse, String redirectLocation) { LOGGER.trace("Request redirected to [{}]", redirectLocation); knotContext.getClientResponse().setStatusCode(HttpResponseStatus.MOVED_PERMANENTLY.code()); MultiMap headers = MultiMap.caseInsensitiveMultiMap(); headers.addAll(getFilteredHeaders(clientResponse.getHeaders(), form.adapter().getAllowedResponseHeaders())); headers.add(HttpHeaders.LOCATION.toString(), redirectLocation); knotContext.getClientResponse().setHeaders(headers); knotContext.clearFragments();/*from w ww .jav a 2 s . co m*/ return knotContext; }
From source file:io.knotx.knot.action.ActionKnotProxyVerticleTest.java
License:Apache License
@Test @KnotxConfiguration("knotx-test.json") public void callPostWithTwoActionFragments_expectResponseOkWithTransitionStep2(TestContext context) throws Exception { createMockAdapter("address-redirect", "", "step2"); KnotContext knotContext = createKnotContext("fragment_form_redirect_in.txt", "fragment_form_self_in.txt"); knotContext.getClientRequest().setMethod(HttpMethod.POST).setFormAttributes( MultiMap.caseInsensitiveMultiMap().add(HIDDEN_INPUT_TAG_NAME, FRAGMENT_REDIRECT_IDENTIFIER)); callActionKnotWithAssertions(context, knotContext, clientResponse -> { context.assertEquals(HttpResponseStatus.MOVED_PERMANENTLY.code(), clientResponse.getClientResponse().getStatusCode()); context.assertEquals("/content/form/step2.html", clientResponse.getClientResponse().getHeaders().get("Location")); context.assertFalse(clientResponse.getTransition() != null); context.assertFalse(clientResponse.getFragments() != null); }, error -> context.fail(error.getMessage())); }
From source file:io.knotx.server.KnotxServerRoutingTest.java
License:Apache License
@Test @KnotxConfiguration("test-server.json") public void whenRequestingPostGlobalPathAndActionDoRedirect_expectRedirectResponse(TestContext context) { Async async = context.async();// w ww . j a v a 2 s . c o m createPassThroughKnot("test-splitter"); createPassThroughKnot("test-assembler"); createSimpleFailingKnot("A-post-engine", HttpResponseStatus.MOVED_PERMANENTLY.code(), MultiMap.caseInsensitiveMultiMap().add("location", "/content/failed.html")); testPostRequest("/content/local/simple.html", resp -> { context.assertEquals(resp.statusCode(), HttpResponseStatus.MOVED_PERMANENTLY.code()); context.assertEquals(resp.getHeader("location"), "/content/failed.html"); async.complete(); }); }
From source file:io.liveoak.container.protocols.http.HttpResourceResponseEncoder.java
License:Open Source License
@Override protected void encode(ChannelHandlerContext ctx, DefaultResourceResponse msg, List<Object> out) throws Exception { int responseStatusCode = 0; String responseMessage = null; HttpHeaders responseHeaders = new DefaultHttpHeaders(); boolean shouldEncodeState = false; boolean shouldCheckForHtmlApp = true; switch (msg.responseType()) { case CREATED: responseStatusCode = HttpResponseStatus.CREATED.code(); responseMessage = HttpResponseStatus.CREATED.reasonPhrase(); shouldEncodeState = true;//from ww w . j a va 2s . c o m break; case READ: responseStatusCode = HttpResponseStatus.OK.code(); responseMessage = HttpResponseStatus.OK.reasonPhrase(); shouldEncodeState = true; break; case UPDATED: responseStatusCode = HttpResponseStatus.OK.code(); responseMessage = HttpResponseStatus.OK.reasonPhrase(); shouldEncodeState = true; break; case DELETED: responseStatusCode = HttpResponseStatus.OK.code(); responseMessage = HttpResponseStatus.OK.reasonPhrase(); shouldEncodeState = true; break; case ERROR: if (msg instanceof ResourceErrorResponse) { shouldEncodeState = true; shouldCheckForHtmlApp = false; switch (((DefaultResourceErrorResponse) msg).errorType()) { case NOT_AUTHORIZED: responseStatusCode = HttpResponseStatus.UNAUTHORIZED.code(); responseMessage = HttpResponseStatus.UNAUTHORIZED.reasonPhrase(); break; case FORBIDDEN: responseStatusCode = HttpResponseStatus.FORBIDDEN.code(); responseMessage = HttpResponseStatus.FORBIDDEN.reasonPhrase(); break; case NOT_ACCEPTABLE: responseStatusCode = HttpResponseStatus.NOT_ACCEPTABLE.code(); responseMessage = HttpResponseStatus.NOT_ACCEPTABLE.reasonPhrase(); break; case NO_SUCH_RESOURCE: responseStatusCode = HttpResponseStatus.NOT_FOUND.code(); responseMessage = HttpResponseStatus.NOT_FOUND.reasonPhrase(); break; case RESOURCE_ALREADY_EXISTS: responseStatusCode = HttpResponseStatus.NOT_ACCEPTABLE.code(); responseMessage = HttpResponseStatus.NOT_ACCEPTABLE.reasonPhrase(); break; case CREATE_NOT_SUPPORTED: responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code(); responseMessage = "Create not supported"; break; case READ_NOT_SUPPORTED: responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code(); responseMessage = "Read not supported"; break; case UPDATE_NOT_SUPPORTED: responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code(); responseMessage = "UpdateStep not supported"; break; case DELETE_NOT_SUPPORTED: responseStatusCode = HttpResponseStatus.METHOD_NOT_ALLOWED.code(); responseMessage = "Delete not supported"; break; case INTERNAL_ERROR: responseStatusCode = HttpResponseStatus.INTERNAL_SERVER_ERROR.code(); responseMessage = HttpResponseStatus.INTERNAL_SERVER_ERROR.reasonPhrase(); break; } //TODO: add content values here to return proper error messages to the client // eg unique error id, short error message, link to page with more information, etc... //response.content().writeBytes(...) } break; case MOVED: if (msg instanceof ResourceMovedResponse) { ResourceMovedResponse resourceMovedResponse = (ResourceMovedResponse) msg; switch (resourceMovedResponse.movedType()) { case MOVED_PERMANENTLY: responseStatusCode = HttpResponseStatus.MOVED_PERMANENTLY.code(); responseMessage = HttpResponseStatus.MOVED_PERMANENTLY.reasonPhrase(); break; case MOVED_TEMPORARILY: responseStatusCode = HttpResponseStatus.FOUND.code(); responseMessage = HttpResponseStatus.FOUND.reasonPhrase(); break; } Integer maxAge = resourceMovedResponse.maxAge(); if (maxAge != null) { responseHeaders.add(HttpHeaders.Names.CACHE_CONTROL, "max-age=" + maxAge); } responseHeaders.add(HttpHeaders.Names.LOCATION, ((ResourceMovedResponse) msg).redirectURL()); } break; } DefaultHttpResponse response; HttpResponseStatus responseStatus; EncodingResult encodingResult = null; if (shouldEncodeState) { MediaTypeMatcher matcher = msg.inReplyTo().mediaTypeMatcher(); if (shouldCheckForHtmlApp) { Application app = msg.inReplyTo().requestContext().application(); if (app != null && app instanceof InternalApplication) { ResourcePath htmlAppPath = ((InternalApplication) app).htmlApplicationResourcePath(); if ((!(msg.resource() instanceof BinaryResource)) && (htmlAppPath != null)) { MediaType bestMatch = matcher.findBestMatch(this.codecManager.mediaTypes()); if (bestMatch == MediaType.HTML) { // HTML was requested and we have an HTML app ResourceRequest htmlAppRequest = new DefaultResourceRequest.Builder(RequestType.READ, htmlAppPath).mediaTypeMatcher(msg.inReplyTo().mediaTypeMatcher()) .requestAttributes(msg.inReplyTo().requestContext().requestAttributes()) .build(); ctx.channel().pipeline().fireChannelRead(htmlAppRequest); return; } } } } try { encodingResult = encodeState(msg.inReplyTo().requestContext(), matcher, msg); } catch (IncompatibleMediaTypeException e) { log.error("Incompatible media type", e); responseStatus = new HttpResponseStatus(HttpResponseStatus.NOT_ACCEPTABLE.code(), e.getMessage()); response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus); response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0); out.add(response); return; } catch (Throwable e) { log.error("Could not encode HTTP response", e); responseStatus = new HttpResponseStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR.code(), HttpResponseStatus.INTERNAL_SERVER_ERROR.reasonPhrase()); response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus); response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0); out.add(response); return; } } responseStatus = new HttpResponseStatus(responseStatusCode, responseMessage); if (encodingResult != null) { if (msg.resource() instanceof BinaryResource) { BinaryResource bin = (BinaryResource) msg.resource(); if (bin.contentLength() == 0) { response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus); response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0); } else { response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, responseStatus); response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, bin.contentLength()); response.headers().add(HttpHeaders.Names.LOCATION, msg.resource().uri().toString()); response.headers().add(HttpHeaders.Names.CONTENT_TYPE, bin.mediaType()); final HttpResponse res = response; bin.readContent(msg.inReplyTo().requestContext(), new BinaryContentSink() { { ctx.write(res); } @Override public void close() { ctx.writeAndFlush(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)); ctx.pipeline().fireUserEventTriggered(new RequestCompleteEvent(msg.requestId())); } @Override public void accept(ByteBuf byteBuf) { ctx.write(new DefaultHttpContent(byteBuf)); } }); return; } } else { ByteBuf content = encodingResult.encoded(); response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus, content); response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, content.readableBytes()); if (msg.resource() != null) { response.headers().add(HttpHeaders.Names.LOCATION, msg.resource().uri().toString()); } else { response.headers().add(HttpHeaders.Names.LOCATION, msg.inReplyTo().resourcePath().toString()); } response.headers().add(HttpHeaders.Names.CONTENT_TYPE, encodingResult.mediaType()); } } else { response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, responseStatus); response.headers().add(HttpHeaders.Names.CONTENT_LENGTH, 0); } response.headers().add(responseHeaders); out.add(response); ctx.fireUserEventTriggered(new RequestCompleteEvent(msg.requestId())); }
From source file:io.reactivex.netty.protocol.http.client.HttpRedirectTest.java
License:Apache License
@Test public void testNoRedirect() { HttpClient.HttpClientConfig.Builder builder = new HttpClient.HttpClientConfig.Builder(null) .setFollowRedirect(false);//ww w . j av a 2 s . c o m HttpClientRequest<ByteBuf> request = HttpClientRequest.createGet("test/redirect?port=" + port); HttpClient.HttpClientConfig config = builder.readTimeout(20000, TimeUnit.MILLISECONDS).build(); HttpClient<ByteBuf, ByteBuf> client = new HttpClientBuilder<ByteBuf, ByteBuf>("localhost", port) .config(config).build(); HttpClientResponse<ByteBuf> response = client.submit(request).toBlocking().single(); assertEquals(HttpResponseStatus.MOVED_PERMANENTLY.code(), response.getStatus().code()); }
From source file:io.reactivex.netty.protocol.http.client.HttpRedirectTest.java
License:Apache License
@Test public void testNoRedirectPost() { HttpClient.HttpClientConfig.Builder builder = new HttpClient.HttpClientConfig.Builder(null); HttpClient.HttpClientConfig config = builder.build(); HttpClientRequest<ByteBuf> request = HttpClientRequest.createPost("test/redirectPost?port=" + port) .withContent("Hello world"); HttpClient<ByteBuf, ByteBuf> client = new HttpClientBuilder<ByteBuf, ByteBuf>("localhost", port) .config(config).build();/*from w ww.j a v a 2 s. c o m*/ HttpClientResponse<ByteBuf> response = client.submit(request).toBlocking().single(); assertEquals(HttpResponseStatus.MOVED_PERMANENTLY.code(), response.getStatus().code()); }
From source file:io.reactivex.netty.protocol.http.client.RequestProcessor.java
License:Apache License
public Observable<Void> redirectGet(HttpServerRequest<ByteBuf> request, final HttpServerResponse<ByteBuf> response) { response.getHeaders().set("Location", "http://localhost:" + request.getQueryParameters().get("port").get(0) + "/test/singleEntity"); response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY); return response.writeAndFlush(Unpooled.EMPTY_BUFFER); }
From source file:io.reactivex.netty.protocol.http.client.RequestProcessor.java
License:Apache License
public Observable<Void> redirectCustom(HttpServerRequest<ByteBuf> request, final HttpServerResponse<ByteBuf> response) { String port = request.getQueryParameters().get("port").get(0); boolean isRedirectLoop = request.getUri().contains("redirectLoop"); int currentCount = getIntParamWithDefault(request, "count", 0); int redirectsRequested = getIntParamWithDefault(request, "redirectsRequested", 1); String location;//from w w w. j a va 2 s . c o m if (currentCount >= redirectsRequested) { location = "http://localhost:" + port + "/test/singleEntity"; } else { location = "http://localhost:" + port + "/test/" + (isRedirectLoop ? "redirectLoop" : "redirectLimited" + redirectLoopUniqueIndex.incrementAndGet()) + "?port=" + port + "&count=" + (currentCount + 1) + "&redirectsRequested=" + redirectsRequested; } response.getHeaders().set("Location", location); response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY); return response.writeAndFlush(Unpooled.EMPTY_BUFFER); }
From source file:io.reactivex.netty.protocol.http.client.RequestProcessor.java
License:Apache License
public Observable<Void> redirectPost(HttpServerRequest<ByteBuf> request, final HttpServerResponse<ByteBuf> response) { response.getHeaders().set("Location", "http://localhost:" + request.getQueryParameters().get("port").get(0) + "/test/post"); response.setStatus(HttpResponseStatus.MOVED_PERMANENTLY); return response.writeAndFlush(Unpooled.EMPTY_BUFFER); }