@SuppressWarnings("unchecked") private Map<String, String> getCurrentUriVariables(ServerWebExchange exchange) { String name = HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE; return exchange.getAttributeOrDefault(name, Collections.<String, String>emptyMap()); }
@Override public Object resolveArgumentValue( MethodParameter methodParameter, BindingContext context, ServerWebExchange exchange) { String name = HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE; return exchange.getAttributeOrDefault(name, Collections.emptyMap()); }
@Override public Map<String, String> pathVariables() { return this.exchange.getAttributeOrDefault( RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, Collections.emptyMap()); }
@Override @SuppressWarnings("unchecked") protected Object resolveNamedValue(String name, MethodParameter parameter, ServerWebExchange exchange) { String attributeName = HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE; return exchange.getAttributeOrDefault(attributeName, Collections.emptyMap()).get(name); }
public static boolean isAlreadyRouted(ServerWebExchange exchange) { return exchange.getAttributeOrDefault(GATEWAY_ALREADY_ROUTED_ATTR, false); }
@Override public Map<String, String> pathVariables() { return this.exchange.getAttributeOrDefault( RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, Collections.emptyMap()); }
public static Map<String, String> getUriTemplateVariables(ServerWebExchange exchange) { return exchange.getAttributeOrDefault(URI_TEMPLATE_VARIABLES_ATTRIBUTE, new HashMap<>()); } }
@Bean public WebHandler webHandler() { return exchange -> { String value = exchange.getAttributeOrDefault(ATTRIBUTE, "none"); return writeToResponse(exchange, value); }; } }
@Override public Predicate<ServerWebExchange> apply(WeightConfig config) { return exchange -> { Map<String, String> weights = exchange.getAttributeOrDefault(WEIGHT_ATTR, Collections.emptyMap()); String routeId = exchange.getAttribute(GATEWAY_PREDICATE_ROUTE_ATTR); // all calculations and comparison against random num happened in // WeightCalculatorWebFilter String group = config.getGroup(); if (weights.containsKey(group)) { String chosenRoute = weights.get(group); if (log.isTraceEnabled()) { log.trace("in group weight: "+ group + ", current route: " + routeId +", chosen route: " + chosenRoute); } return routeId.equals(chosenRoute); } else if (log.isTraceEnabled()) { log.trace("no weights found for group: "+ group + ", current route: " + routeId); } return false; }; } }
@Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { String name = "test-attribute"; String value = exchange.getAttributeOrDefault(name, ""); exchange.getAttributes().put(name, value + ":" + this.name); return chain.filter(exchange); } }
public void reset(ServerWebExchange exchange) { //TODO: what else to do to reset SWE? Set<String> addedHeaders = exchange.getAttributeOrDefault(CLIENT_RESPONSE_HEADER_NAMES, Collections.emptySet()); addedHeaders.forEach(header -> exchange.getResponse().getHeaders().remove(header)); exchange.getAttributes().remove(GATEWAY_ALREADY_ROUTED_ATTR); }
@ResponseBody @GetMapping("/login") public Mono<String> login(ServerWebExchange exchange) { Mono<CsrfToken> token = exchange.getAttributeOrDefault(CsrfToken.class.getName(), Mono.empty()); return token.map(t -> "<!DOCTYPE html>\n"
@Bean @Order(500) public GlobalFilter modifyResponseFilter() { return (exchange, chain) -> { log.info("modifyResponseFilter start"); String value = exchange.getAttributeOrDefault(GATEWAY_HANDLER_MAPPER_ATTR, "N/A"); exchange.getResponse().getHeaders().add(HANDLER_MAPPER_HEADER, value); Route route = exchange.getAttributeOrDefault(GATEWAY_ROUTE_ATTR,null); if (route != null) { exchange.getResponse().getHeaders().add(ROUTE_ID_HEADER, route.getId()); } return chain.filter(exchange); }; } }
@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { Flux<DataBuffer> body = exchange.getAttributeOrDefault(CACHED_REQUEST_BODY_KEY, null); if (body != null) { ServerHttpRequestDecorator decorator = new ServerHttpRequestDecorator(exchange.getRequest()) { @Override public Flux<DataBuffer> getBody() { return body; } }; exchange.getAttributes().remove(CACHED_REQUEST_BODY_KEY); return chain.filter(exchange.mutate().request(decorator).build()); } return chain.filter(exchange); }
@Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { boolean alreadyPrefixed = exchange.getAttributeOrDefault(GATEWAY_ALREADY_PREFIXED_ATTR, false); if (alreadyPrefixed) { return chain.filter(exchange); } exchange.getAttributes().put(GATEWAY_ALREADY_PREFIXED_ATTR, true); ServerHttpRequest req = exchange.getRequest(); addOriginalRequestUrl(exchange, req.getURI()); String newPath = config.prefix + req.getURI().getRawPath(); ServerHttpRequest request = req.mutate() .path(newPath) .build(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, request.getURI()); if (log.isTraceEnabled()) { log.trace("Prefixed URI with: "+config.prefix+" -> "+request.getURI()); } return chain.filter(exchange.mutate().request(request).build()); }; }
public GatewayFilter apply(Repeat<ServerWebExchange> repeat, Retry<ServerWebExchange> retry) { return (exchange, chain) -> { trace("Entering retry-filter"); // chain.filter returns a Mono<Void> Publisher<Void> publisher = chain.filter(exchange) //.log("retry-filter", Level.INFO) .doOnSuccessOrError((aVoid, throwable) -> { int iteration = exchange.getAttributeOrDefault(RETRY_ITERATION_KEY, -1); int newIteration = iteration + 1; trace("setting new iteration in attr %d", newIteration); exchange.getAttributes().put(RETRY_ITERATION_KEY, newIteration); }); if (retry != null) { // retryWhen returns a Mono<Void> // retry needs to go before repeat publisher = ((Mono<Void>)publisher).retryWhen(retry.withApplicationContext(exchange)); } if (repeat != null) { // repeatWhen returns a Flux<Void> // so this needs to be last and the variable a Publisher<Void> publisher = ((Mono<Void>)publisher).repeatWhen(repeat.withApplicationContext(exchange)); } return Mono.fromDirect(publisher); }; }
boolean chunkedTransfer = "chunked".equalsIgnoreCase(transferEncoding); boolean preserveHost = exchange.getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false);
private Mono<DataBuffer> createBuffer(ServerWebExchange exchange) { Mono<CsrfToken> token = exchange.getAttributeOrDefault(CsrfToken.class.getName(), Mono.empty()); return token .map(LogoutPageGeneratingWebFilter::csrfToken) .defaultIfEmpty("") .map(csrfTokenHtmlInput -> { byte[] bytes = createPage(csrfTokenHtmlInput); DataBufferFactory bufferFactory = exchange.getResponse().bufferFactory(); return bufferFactory.wrap(bytes); }); }
private Mono<DataBuffer> createBuffer(ServerWebExchange exchange) { Mono<CsrfToken> token = exchange.getAttributeOrDefault(CsrfToken.class.getName(), Mono.empty()); return token .map(LoginPageGeneratingWebFilter::csrfToken) .defaultIfEmpty("") .map(csrfTokenHtmlInput -> { byte[] bytes = createPage(exchange, csrfTokenHtmlInput); DataBufferFactory bufferFactory = exchange.getResponse().bufferFactory(); return bufferFactory.wrap(bytes); }); }