Fix Undertow compression config with invalid Mime Types
Prior to this commit, the Undertow compression configuration provided by Spring Boot would fail and throw an exception for invalid MIME Types when trying to check them against the list of configured types for compression. This commit ensures that invalid MIME Types are ignored and that compression is disabled for those. Fixes gh-20955
This commit is contained in:
@@ -32,6 +32,7 @@ import io.undertow.util.HttpString;
|
||||
|
||||
import org.springframework.boot.web.server.Compression;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.util.InvalidMimeTypeException;
|
||||
import org.springframework.util.MimeType;
|
||||
import org.springframework.util.MimeTypeUtils;
|
||||
|
||||
@@ -90,11 +91,17 @@ final class UndertowCompressionConfigurer {
|
||||
public boolean resolve(HttpServerExchange value) {
|
||||
String contentType = value.getResponseHeaders().getFirst(HttpHeaders.CONTENT_TYPE);
|
||||
if (contentType != null) {
|
||||
for (MimeType mimeType : this.mimeTypes) {
|
||||
if (mimeType.isCompatibleWith(MimeTypeUtils.parseMimeType(contentType))) {
|
||||
return true;
|
||||
try {
|
||||
MimeType parsed = MimeTypeUtils.parseMimeType(contentType);
|
||||
for (MimeType mimeType : this.mimeTypes) {
|
||||
if (mimeType.isCompatibleWith(parsed)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InvalidMimeTypeException ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -357,10 +357,12 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
||||
}
|
||||
|
||||
protected void assertResponseIsCompressed(ResponseEntity<Void> response) {
|
||||
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(response.getHeaders().getFirst("X-Test-Compressed")).isEqualTo("true");
|
||||
}
|
||||
|
||||
protected void assertResponseIsNotCompressed(ResponseEntity<Void> response) {
|
||||
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(response.getHeaders().keySet()).doesNotContain("X-Test-Compressed");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user