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-24387
This commit is contained in:
Brian Clozel
2020-01-17 15:01:58 +01:00
parent 6699833121
commit e1e8c165db

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