Avoid setting special Content-* response headers for Tomcat

As of gh-21783, Spring WebFlux uses a `TomcatHeadersAdapter`
implementation to directly address the native headers used by the
server.

In the case of Tomcat, "Content-Length" and "Content-Type" headers are
processed separately and should not be added to the native headers map.

This commit improves the `HandlerAdapter` implementation for Tomcat and
removes those headers, if previously set in the map. The adapter
already has a section that handles the Tomcat-specific calls for such
headers.

Fixes gh-24361
This commit is contained in:
Brian Clozel 2020-01-17 15:01:58 +01:00
parent daa30a9f0b
commit 59bef22235
1 changed files with 2 additions and 0 deletions

View File

@ -216,6 +216,7 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
if (response.getContentType() == null && contentType != null) {
response.setContentType(contentType.toString());
}
getHeaders().remove(HttpHeaders.CONTENT_TYPE);
Charset charset = (contentType != null ? contentType.getCharset() : null);
if (response.getCharacterEncoding() == null && charset != null) {
response.setCharacterEncoding(charset.name());
@ -224,6 +225,7 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
if (contentLength != -1) {
response.setContentLengthLong(contentLength);
}
getHeaders().remove(HttpHeaders.CONTENT_LENGTH);
}
@Override