Skip to content

Commit 90b68d8

Browse files
committed
Merge pull request #32101 from terminux
* pr/32101: Polish 'Align MimeMappings with Tomcat's defaults' Align MimeMappings with Tomcat's defaults Closes gh-32101
2 parents c67010d + 86f38e1 commit 90b68d8

File tree

8 files changed

+1385
-214
lines changed

8 files changed

+1385
-214
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatEmbeddedContext.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.web.embedded.tomcat;
1818

1919
import java.util.ArrayList;
20+
import java.util.Arrays;
2021
import java.util.List;
2122
import java.util.Map;
2223
import java.util.TreeMap;
@@ -30,6 +31,7 @@
3031
import org.apache.catalina.core.StandardWrapper;
3132
import org.apache.catalina.session.ManagerBase;
3233

34+
import org.springframework.boot.web.server.MimeMappings;
3335
import org.springframework.boot.web.server.WebServerException;
3436
import org.springframework.util.ClassUtils;
3537

@@ -44,6 +46,8 @@ class TomcatEmbeddedContext extends StandardContext {
4446

4547
private TomcatStarter starter;
4648

49+
private MimeMappings mimeMappings;
50+
4751
@Override
4852
public boolean loadOnStartup(Container[] children) {
4953
// deferred until later (see deferredLoadOnStartup)
@@ -118,4 +122,27 @@ TomcatStarter getStarter() {
118122
return this.starter;
119123
}
120124

125+
void setMimeMappings(MimeMappings mimeMappings) {
126+
this.mimeMappings = mimeMappings;
127+
}
128+
129+
@Override
130+
public String[] findMimeMappings() {
131+
List<String> mappings = new ArrayList<>();
132+
mappings.addAll(Arrays.asList(super.findMimeMappings()));
133+
if (this.mimeMappings != null) {
134+
this.mimeMappings.forEach((mapping) -> mappings.add(mapping.getExtension()));
135+
}
136+
return mappings.toArray(String[]::new);
137+
}
138+
139+
@Override
140+
public String findMimeMapping(String extension) {
141+
String mimeMapping = super.findMimeMapping(extension);
142+
if (mimeMapping != null) {
143+
return mimeMapping;
144+
}
145+
return (this.mimeMappings != null) ? this.mimeMappings.get(extension) : null;
146+
}
147+
121148
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,9 +389,7 @@ protected void configureContext(Context context, ServletContextInitializer[] ini
389389
tomcatErrorPage.setExceptionType(errorPage.getExceptionName());
390390
context.addErrorPage(tomcatErrorPage);
391391
}
392-
for (MimeMappings.Mapping mapping : getMimeMappings()) {
393-
context.addMimeMapping(mapping.getExtension(), mapping.getMimeType());
394-
}
392+
setMimeMappings(context);
395393
configureSession(context);
396394
configureCookieProcessor(context);
397395
new DisableReferenceClearingContextCustomizer().customize(context);
@@ -423,6 +421,16 @@ private void configureSession(Context context) {
423421
}
424422
}
425423

424+
private void setMimeMappings(Context context) {
425+
if (context instanceof TomcatEmbeddedContext embeddedContext) {
426+
embeddedContext.setMimeMappings(getMimeMappings());
427+
return;
428+
}
429+
for (MimeMappings.Mapping mapping : getMimeMappings()) {
430+
context.addMimeMapping(mapping.getExtension(), mapping.getMimeType());
431+
}
432+
}
433+
426434
private void configureCookieProcessor(Context context) {
427435
SameSite sessionSameSite = getSession().getCookie().getSameSite();
428436
List<CookieSameSiteSupplier> suppliers = new ArrayList<>();

0 commit comments

Comments
 (0)