@Override public void apply(Request request, Response response) { try { // do not touch any valid uri: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30 if (url.matches("^\\w+://.*")) { } else if (url.startsWith("/")) { url = String.format("http%s://%s%s%s", request.secure ? "s" : "", request.domain, (request.port == 80 || request.port == 443) ? "" : ":" + request.port, url); } else { url = String.format("http%s://%s%s%s%s", request.secure ? "s" : "", request.domain, (request.port == 80 || request.port == 443) ? "" : ":" + request.port, request.path, request.path.endsWith("/") ? url : "/" + url); } response.status = code; response.setHeader("Location", url); } catch (Exception e) { throw new UnexpectedException(e); } }
public void writeChunk(Request playRequest, Response playResponse, ChannelHandlerContext ctx, HttpRequest nettyRequest, Object chunk) { try { if (playResponse.direct == null) { playResponse.setHeader("Transfer-Encoding", "chunked"); playResponse.direct = new LazyChunkedInput(); copyResponse(ctx, playRequest, playResponse, nettyRequest); } ((LazyChunkedInput) playResponse.direct).writeChunk(chunk); if (this.pipelines.get("ChunkedWriteHandler") != null) { ((ChunkedWriteHandler) this.pipelines.get("ChunkedWriteHandler")).resumeTransfer(); } if (this.pipelines.get("SslChunkedWriteHandler") != null) { ((ChunkedWriteHandler) this.pipelines.get("SslChunkedWriteHandler")).resumeTransfer(); } } catch (Exception e) { throw new UnexpectedException(e); } }
private static void renderInputStream(InputStream is, long length, Response response) throws IOException { if (response.getHeader("Content-Length") != null) { response.direct = is; } else if (length != 0) { response.setHeader("Content-Length", String.valueOf(length)); response.direct = is; } else { copyInputStreamAndClose(is, response.out); } }
/** * Add headers to allow cross-domain requests. Be careful, a lot of browsers don't support these features and * will ignore the headers. Refer to the browsers' documentation to know what versions support them. * * @param allowOrigin * a comma separated list of domains allowed to perform the x-domain call, or "*" for all. * @param allowMethods * a comma separated list of HTTP methods allowed, or null for all. * @param allowCredentials * Let the browser send the cookies when doing a x-domain request. Only respected by the browser if * allowOrigin != "*" */ public void accessControl(String allowOrigin, String allowMethods, boolean allowCredentials) { setHeader("Access-Control-Allow-Origin", allowOrigin); if (allowMethods != null) { setHeader("Access-Control-Allow-Methods", allowMethods); } if (allowCredentials == true) { if (allowOrigin.equals("*")) { Logger.warn( "Response.accessControl: When the allowed domain is \"*\", Allow-Credentials is likely to be ignored by the browser."); } setHeader("Access-Control-Allow-Credentials", "true"); } }
import play.GlobalSettings; import play.libs.F.Promise; import play.mvc.Action; import play.mvc.Http; import play.mvc.Result; public class Global extends GlobalSettings { private class ActionWrapper extends Action.Simple { public ActionWrapper(Action<?> action) { this.delegate = action; } @Override public Promise<Result> call(Http.Context ctx) throws java.lang.Throwable { Promise<Result> result = this.delegate.call(ctx); Http.Response response = ctx.response(); response.setHeader("Access-Control-Allow-Origin", "*"); return result; } } @Override public Action<?> onRequest(Http.Request request, java.lang.reflect.Method actionMethod) { return new ActionWrapper(super.onRequest(request, actionMethod)); } }
@Override public F.Promise<SimpleResult> call(Http.Context context) throws Throwable { final String authHeader = context.request().getHeader(AUTHORIZATION); if (authHeader == null) { context.response().setHeader(WWW_AUTHENTICATE, REALM); return F.Promise.pure((SimpleResult) unauthorized()); } final String auth = authHeader.substring(6); final String[] credString = org.apache.commons.codec.binary.StringUtils.newStringUtf8(Base64.decodeBase64(auth)).split(":"); if (credString.length != 2) { return F.Promise.pure((SimpleResult) unauthorized()); } final String username = credString[0]; final String password = credString[1]; return (StringUtils.equals(username, play.Play.application().configuration().getString("rest.auth.user", "")) && StringUtils.equals(password, play.Play.application().configuration().getString("rest.auth.pass", ""))) ? delegate.call(context) : F.Promise.pure((SimpleResult) unauthorized()); } }
import play.GlobalSettings; import play.libs.F.Promise; import play.mvc.Action; import play.mvc.Http; import play.mvc.SimpleResult; public class Global extends GlobalSettings { private class ActionWrapper extends Action.Simple { public ActionWrapper(Action<?> action) { this.delegate = action; } @Override public Promise<SimpleResult> call(Http.Context ctx) throws java.lang.Throwable { Promise<SimpleResult> result = this.delegate.call(ctx); Http.Response response = ctx.response(); response.setHeader("Access-Control-Allow-Origin", "*"); return result; } } @Override public Action<?> onRequest(Http.Request request, java.lang.reflect.Method actionMethod) { return new ActionWrapper(super.onRequest(request, actionMethod)); } }
import play.*; import play.mvc.*; public class Global extends GlobalSettings { private class ActionWrapper extends Action.Simple { public ActionWrapper(Action action) { this.delegate = action; } @Override public Result call(Http.Context ctx) throws java.lang.Throwable { Result result = this.delegate.call(ctx); Http.Response response = ctx.response(); response.setHeader("X-My-Header", "100"); return result; } } @Override public Action onRequest(Http.Request request, java.lang.reflect.Method actionMethod) { return new ActionWrapper(super.onRequest(request, actionMethod)); } }
/** * Add cache-control headers * * @param etag * the Etag value * * @param duration * the cache duration (Ex: 3h) * @param lastModified * The last modified date */ public void cacheFor(String etag, String duration, long lastModified) { int maxAge = Time.parseDuration(duration); setHeader("Cache-Control", "max-age=" + maxAge); setHeader("Last-Modified", Utils.getHttpDateFormatter().format(new Date(lastModified))); setHeader("Etag", etag); }
@Override public void setResponseHeader(final String name, final String value) { response.setHeader(name, value); }
@Override public void setResponseHeader(final String name, final String value) { response.setHeader(name, value); }
@Override public void setResponseHeader(final String name, final String value) { response.setHeader(name, value); }
@Override public void apply(Request request, Response response) { response.status = Http.StatusCode.UNAUTHORIZED; response.setHeader("WWW-Authenticate", "Basic realm=\"" + realm + "\""); }
@Override public CompletionStage<Result> call(final Http.Context ctx) { ctx.response().setHeader(HeaderNames.CACHE_CONTROL, "no-cache, no-store, must-revalidate"); ctx.response().setHeader(HeaderNames.PRAGMA, "no-cache"); ctx.response().setHeader(HeaderNames.EXPIRES, "0"); return delegate.call(ctx); } }
@Override public Promise<SimpleResult> call(Http.Context ctx) throws java.lang.Throwable { Promise<SimpleResult> result = this.delegate.call(ctx); Http.Response response = ctx.response(); response.setHeader("Access-Control-Allow-Origin", "*"); response.setContentType("application/json"); return result; }
private void addContentDispositionHeader(Response response) throws UnsupportedEncodingException { if (name == null) { response.setHeader("Content-Disposition", dispositionType()); } else if (canAsciiEncode(name)) { String contentDisposition = "%s; filename=\"%s\""; response.setHeader("Content-Disposition", String.format(contentDisposition, dispositionType(), name)); } else { String encoding = getEncoding(); String contentDisposition = "%1$s; filename*=" + encoding + "''%2$s; filename=\"%2$s\""; response.setHeader("Content-Disposition", String.format(contentDisposition, dispositionType(), encoder.encode(name, encoding))); } }
@Override public void apply(Request request, Response response) { response.status = Http.StatusCode.NOT_MODIFIED; if (etag != null) { response.setHeader("Etag", etag); } }
/** * Add a cache-control header * * @param duration * Ex: 3h */ public void cacheFor(String duration) { int maxAge = Time.parseDuration(duration); setHeader("Cache-Control", "max-age=" + maxAge); }
@Override public void apply(Request request, Response response) { try { response.status = Http.StatusCode.FOUND; response.setHeader("Location", file); } catch (Exception e) { throw new UnexpectedException(e); } }
/** * Sets the content-type of the response. * * @param contentType The content type, must not be null */ public void setContentType(String contentType) { setHeader(CONTENT_TYPE, contentType); }