Example usage for org.springframework.web.server ServerWebExchange getAttribute

List of usage examples for org.springframework.web.server ServerWebExchange getAttribute

Introduction

In this page you can find the example usage for org.springframework.web.server ServerWebExchange getAttribute.

Prototype

@SuppressWarnings("unchecked")
@Nullable
default <T> T getAttribute(String name) 

Source Link

Document

Return the request attribute value if present.

Usage

From source file:org.springframework.cloud.gateway.filter.factory.RetryGatewayFilterFactory.java

public boolean exceedsMaxIterations(ServerWebExchange exchange, RetryConfig retryConfig) {
    Integer iteration = exchange.getAttribute(RETRY_ITERATION_KEY);

    // TODO: deal with null iteration
    boolean exceeds = iteration != null && iteration >= retryConfig.getRetries();
    trace("exceedsMaxIterations %b, iteration %d, configured retries %d", exceeds, iteration,
            retryConfig.getRetries());/*ww  w . j a v  a2  s. com*/
    return exceeds;
}

From source file:org.springframework.cloud.gateway.filter.GatewayMetricsFilter.java

private void endTimerInner(ServerWebExchange exchange, Sample sample) {
    String outcome = "CUSTOM";
    String status = "CUSTOM";
    HttpStatus statusCode = exchange.getResponse().getStatusCode();
    if (statusCode != null) {
        outcome = statusCode.series().name();
        status = statusCode.name();/*w  w  w. j ava  2s .c  om*/
    } else { // a non standard HTTPS status could be used. Let's be defensive here
        if (exchange.getResponse() instanceof AbstractServerHttpResponse) {
            Integer statusInt = ((AbstractServerHttpResponse) exchange.getResponse()).getStatusCodeValue();
            if (statusInt != null) {
                status = String.valueOf(statusInt);
            } else {
                status = "NA";
            }
        }
    }
    Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
    Tags tags = Tags.of("outcome", outcome, "status", status, "routeId", route.getId(), "routeUri",
            route.getUri().toString());
    if (log.isTraceEnabled()) {
        log.trace("Stopping timer 'gateway.requests' with tags " + tags);
    }
    sample.stop(meterRegistry.timer("gateway.requests", tags));
}

From source file:org.springframework.cloud.gateway.filter.NettyWriteResponseFilter.java

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    // NOTICE: nothing in "pre" filter stage as CLIENT_RESPONSE_CONN_ATTR is not added
    // until the NettyRoutingFilter is run
    return chain.filter(exchange).then(Mono.defer(() -> {
        Connection connection = exchange.getAttribute(CLIENT_RESPONSE_CONN_ATTR);

        if (connection == null) {
            return Mono.empty();
        }// ww w.java  2 s  .c o  m
        log.trace("NettyWriteResponseFilter start");
        ServerHttpResponse response = exchange.getResponse();

        NettyDataBufferFactory factory = (NettyDataBufferFactory) response.bufferFactory();
        // TODO: what if it's not netty

        final Flux<NettyDataBuffer> body = connection.inbound().receive().retain() // TODO:
                // needed?
                .map(factory::wrap);

        MediaType contentType = null;
        try {
            contentType = response.getHeaders().getContentType();
        } catch (Exception e) {
            log.trace("invalid media type", e);
        }
        return (isStreamingMediaType(contentType) ? response.writeAndFlushWith(body.map(Flux::just))
                : response.writeWith(body));
    }));
}

From source file:org.springframework.cloud.gateway.filter.WebClientWriteResponseFilter.java

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    // NOTICE: nothing in "pre" filter stage as CLIENT_RESPONSE_ATTR is not added
    // until the WebHandler is run
    return chain.filter(exchange).then(Mono.defer(() -> {
        ClientResponse clientResponse = exchange.getAttribute(CLIENT_RESPONSE_ATTR);
        if (clientResponse == null) {
            return Mono.empty();
        }//from www .  j a v a 2s .  co  m
        log.trace("WebClientWriteResponseFilter start");
        ServerHttpResponse response = exchange.getResponse();

        return response.writeWith(clientResponse.body(BodyExtractors.toDataBuffers()))
                .log("webClient response");
    }));
}

From source file:org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter.java

static Map<String, String> getWeights(ServerWebExchange exchange) {
    Map<String, String> weights = exchange.getAttribute(WEIGHT_ATTR);

    if (weights == null) {
        weights = new ConcurrentHashMap<>();
        exchange.getAttributes().put(WEIGHT_ATTR, weights);
    }/*from  w  w  w  .  ja  va 2 s.co  m*/
    return weights;
}

From source file:org.springframework.cloud.gateway.handler.FilteringWebHandler.java

@Override
public Mono<Void> handle(ServerWebExchange exchange) {
    Optional<Route> route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
    List<WebFilter> routeFilters = combineFiltersForRoute(route);

    logger.debug("Sorted routeFilters: " + routeFilters);

    return new DefaultWebFilterChain(routeFilters, getDelegate()).filter(exchange);
}

From source file:org.springframework.cloud.sleuth.instrument.web.TraceWebFilter.java

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    if (tracer().currentSpan() != null) {
        // clear any previous trace
        tracer().withSpanInScope(null);//www.j  a va2s  . com
    }
    String uri = exchange.getRequest().getPath().pathWithinApplication().value();
    if (log.isDebugEnabled()) {
        log.debug("Received a request to uri [" + uri + "]");
    }
    Span spanFromAttribute = getSpanFromAttribute(exchange);
    final String CONTEXT_ERROR = "sleuth.webfilter.context.error";
    return chain.filter(exchange).compose(f -> f.then(Mono.subscriberContext())
            .onErrorResume(t -> Mono.subscriberContext().map(c -> c.put(CONTEXT_ERROR, t))).flatMap(c -> {
                // reactivate span from context
                Span span = spanFromContext(c);
                Mono<Void> continuation;
                Throwable t = null;
                if (c.hasKey(CONTEXT_ERROR)) {
                    t = c.get(CONTEXT_ERROR);
                    continuation = Mono.error(t);
                } else {
                    continuation = Mono.empty();
                }
                String httpRoute = null;
                Object attribute = exchange.getAttribute(HandlerMapping.BEST_MATCHING_HANDLER_ATTRIBUTE);
                if (attribute instanceof HandlerMethod) {
                    HandlerMethod handlerMethod = (HandlerMethod) attribute;
                    addClassMethodTag(handlerMethod, span);
                    addClassNameTag(handlerMethod, span);
                    Object pattern = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
                    httpRoute = pattern != null ? pattern.toString() : "";
                }
                addResponseTagsForSpanWithoutParent(exchange, exchange.getResponse(), span);
                DecoratedServerHttpResponse delegate = new DecoratedServerHttpResponse(exchange.getResponse(),
                        exchange.getRequest().getMethodValue(), httpRoute);
                handler().handleSend(delegate, t, span);
                if (log.isDebugEnabled()) {
                    log.debug("Handled send of " + span);
                }
                return continuation;
            }).subscriberContext(c -> {
                Span span;
                if (c.hasKey(Span.class)) {
                    Span parent = c.get(Span.class);
                    span = tracer().nextSpan(TraceContextOrSamplingFlags.create(parent.context())).start();
                    if (log.isDebugEnabled()) {
                        log.debug("Found span in reactor context" + span);
                    }
                } else {
                    if (spanFromAttribute != null) {
                        span = spanFromAttribute;
                        if (log.isDebugEnabled()) {
                            log.debug("Found span in attribute " + span);
                        }
                    } else {
                        span = handler().handleReceive(extractor(), exchange.getRequest().getHeaders(),
                                exchange.getRequest());
                        if (log.isDebugEnabled()) {
                            log.debug("Handled receive of span " + span);
                        }
                    }
                    exchange.getAttributes().put(TRACE_REQUEST_ATTR, span);
                }
                return c.put(Span.class, span);
            }));
}

From source file:org.springframework.cloud.sleuth.instrument.web.TraceWebFilter.java

private Span getSpanFromAttribute(ServerWebExchange exchange) {
    return exchange.getAttribute(TRACE_REQUEST_ATTR);
}

From source file:org.springframework.cloud.sleuth.instrument.web.TraceWebFilter.java

private boolean spanWithoutParent(ServerWebExchange exchange) {
    return exchange.getAttribute(TRACE_SPAN_WITHOUT_PARENT) != null;
}

From source file:org.springframework.web.reactive.result.HandlerResultHandlerSupport.java

@SuppressWarnings("unchecked")
private List<MediaType> getProducibleTypes(ServerWebExchange exchange,
        Supplier<List<MediaType>> producibleTypesSupplier) {

    Set<MediaType> mediaTypes = exchange.getAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE);
    return (mediaTypes != null ? new ArrayList<>(mediaTypes) : producibleTypesSupplier.get());
}