This PR Closes #26208
As proposed by @tstavinoha (https://github.com/spring-projects/spring-framework/issues/26208#issuecomment-739817950) and @rstoyanchev (https://github.com/spring-projects/spring-framework/issues/26208#issuecomment-783324482), this adds the option applyAttributes to the WebClient.Builder. If it is set to true, the ClientRequest.attributes() will be copied over to the underlying http-client library HttpRequest. For this there are different implementations for the various ClientHttpConnector implementations:
* JettyClientHttpRequest: Attributes are set with the org.eclipse.jetty.client.api.Request#attribute(String, Object) method one by one
* ReactorClientHttpRequest: A single Map<String, Object> containing all request attributes is set to the Attribute attributes in the reactor.netty.channel.ChannelOperations#channel() (as proposed by https://github.com/spring-projects/spring-framework/issues/26208#issuecomment-783324482)
* ReactorNetty2ClientHttpRequest: Same as in ReactorClientHttpRequest, but with the netty5 classes
* HttpComponentsClientHttpRequest: Attributes are set with the org.apache.hc.client5.http.protocol.HttpClientContext#setAttribute(String, Object) method one by one
* JdkClientHttpRequest: I still need some input on this one. As far as I can see there is no possibility to set request attributes to the java.net.http.HttpRequest?
As suggested by https://github.com/spring-projects/spring-framework/issues/26208#issuecomment-739817950, applyAttributes defaults to true and the user can opt-out when using the Builder to create the Connector.
Comment From: PhilKes
@rstoyanchev would love some feedback if you have the time.