[[webflux-client-context]]
= Context

xref:web/webflux-webclient/client-attributes.adoc[Attributes] provide a convenient way to pass information to the filter
chain but they only influence the current request. If you want to pass information that
propagates to additional requests that are nested, e.g. via `flatMap`, or executed after,
e.g. via `concatMap`, then you'll need to use the Reactor `Context`.

The Reactor `Context` needs to be populated at the end of a reactive chain in order to
apply to all operations. For example:

[tabs]
======
Java::
+
[source,java,indent=0,subs="verbatim,quotes",role="primary"]
----
	WebClient client = WebClient.builder()
			.filter((request, next) ->
					Mono.deferContextual(contextView -> {
						String value = contextView.get("foo");
						// ...
					}))
			.build();

	client.get().uri("https://example.org/")
			.retrieve()
			.bodyToMono(String.class)
			.flatMap(body -> {
					// perform nested request (context propagates automatically)...
			})
			.contextWrite(context -> context.put("foo", ...));
----
======



