/** * Enables CORS - Cross-Origin Resource Sharing - for the wrapped {@code inner} Route. * * @param inner the inner route to be wrapped with the CORS enabling * @return the new route wrapping {@code inner} with the CORS enabling */ public static Route enableCors(final Supplier<Route> inner) { return extractActorSystem(actorSystem -> { final boolean enableCors = actorSystem.settings().config().getBoolean(ConfigKeys.ENABLE_CORS); if (enableCors) { return Directives.optionalHeaderValueByType(AccessControlRequestHeaders.class, corsRequestHeaders -> { final ArrayList<HttpHeader> newHeaders = new ArrayList<>(CORS_HEADERS); corsRequestHeaders.ifPresent(toAdd -> newHeaders.add(AccessControlAllowHeaders.create( StreamSupport.stream(toAdd.getHeaders().spliterator(), false) .toArray(String[]::new)) ) ); return route( options(() -> complete(HttpResponse.create().withStatus(StatusCodes.OK).addHeaders(newHeaders)) ), respondWithHeaders(newHeaders, inner) ); }); } else { return inner.get(); } }); }
.withStatus(statusCode) .withEntity(ContentTypes.APPLICATION_JSON, ByteString.fromString(cre.toJsonString())) .addHeaders(securityResponseHeaders);