SPR-15066 - Allow request interceptor to add to headers set via entity #1277
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Provide a fully mutable
HttpHeaders
toClientHttpRequestInterceptor
s of aRestTemplate
when headers are set usingHttpEntity
. This avoidsUnsupportedOperationException
if bothHttpEntity
andClientHttpRequestInterceptor
add values for the same HTTP header.I came upon this error while investigating a bug report in a third-party starter I maintain. The user was using a
RestTemplate
where our starter (without the user's knowledge) provided aClientHttpRequestInterceptor
that added anAuthorization
header. The user rather wanted to use a different authentication method and provided anAuthorization
header with a different scheme through anHttpEntity
passed to theRestTemplate
. I am avoiding this problem in our starter by callingHttpHeaders#set(String, String)
instead of#add(String, String)
.But seeing that
HttpEntityRequestCallback
was copying over headers from the providedHttpEntity
to anotherHttpHeaders
object used for the request, I thought the intended behavior was rather to provide a fully mutableHttpHeaders
for the remainder of the processing of the request, including any invocation ofClientHttpRequestInterceptor
s.On the other hand, this is a marginal use case at best, and could even be considered misuse of the API.
Issue: SPR-15066