Skip to content

Commit 8db77a6

Browse files
committed
Properly configure tldSkipPatterns for Tomcat
Fixes gh-10391
1 parent 424793d commit 8db77a6

File tree

3 files changed

+24
-62
lines changed

3 files changed

+24
-62
lines changed

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

Lines changed: 0 additions & 61 deletions
This file was deleted.

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.apache.catalina.webresources.StandardRoot;
6161
import org.apache.coyote.AbstractProtocol;
6262
import org.apache.coyote.http2.Http2Protocol;
63+
import org.apache.tomcat.util.scan.StandardJarScanFilter;
6364

6465
import org.springframework.boot.web.server.ErrorPage;
6566
import org.springframework.boot.web.server.MimeMappings;
@@ -201,7 +202,7 @@ protected void prepareContext(Host host, ServletContextInitializer[] initializer
201202
resetDefaultLocaleMapping(context);
202203
addLocaleMappings(context);
203204
context.setUseRelativeRedirects(false);
204-
SkipPatternJarScanner.apply(context, this.tldSkipPatterns);
205+
configureTldSkipPatterns(context);
205206
WebappLoader loader = new WebappLoader(context.getParentClassLoader());
206207
loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName());
207208
loader.setDelegate(true);
@@ -220,6 +221,12 @@ protected void prepareContext(Host host, ServletContextInitializer[] initializer
220221
postProcessContext(context);
221222
}
222223

224+
private void configureTldSkipPatterns(TomcatEmbeddedContext context) {
225+
StandardJarScanFilter filter = new StandardJarScanFilter();
226+
filter.setTldSkip(StringUtils.collectionToCommaDelimitedString(this.tldSkipPatterns));
227+
context.getJarScanner().setJarScanFilter(filter);
228+
}
229+
223230
/**
224231
* Override Tomcat's default locale mappings to align with other servers. See
225232
* {@code org.apache.catalina.util.CharsetMapperDefault.properties}.

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Arrays;
2323
import java.util.Locale;
2424
import java.util.Map;
25+
import java.util.Set;
2526
import java.util.concurrent.TimeUnit;
2627

2728
import javax.naming.InitialContext;
@@ -43,6 +44,7 @@
4344
import org.apache.catalina.util.CharsetMapper;
4445
import org.apache.catalina.valves.RemoteIpValve;
4546
import org.apache.jasper.servlet.JspServlet;
47+
import org.apache.tomcat.JarScanFilter;
4648
import org.junit.After;
4749
import org.junit.Rule;
4850
import org.junit.Test;
@@ -385,6 +387,20 @@ public void sessionIdGeneratorIsConfiguredWithAttributesFromTheManager() {
385387
assertThat(sessionIdGenerator.getJvmRoute()).isEqualTo("test");
386388
}
387389

390+
@Test
391+
@SuppressWarnings("unchecked")
392+
public void tldSkipPatternsShouldBeAppliedToContextJarScanner() throws Exception {
393+
TomcatServletWebServerFactory factory = getFactory();
394+
factory.addTldSkipPatterns("foo.jar", "bar.jar");
395+
this.webServer = factory.getWebServer();
396+
this.webServer.start();
397+
Tomcat tomcat = ((TomcatWebServer) this.webServer).getTomcat();
398+
Context context = (Context) tomcat.getHost().findChildren()[0];
399+
JarScanFilter jarScanFilter = context.getJarScanner().getJarScanFilter();
400+
Set<String> tldSkipSet = (Set<String>) ReflectionTestUtils.getField(jarScanFilter, "tldSkipSet");
401+
assertThat(tldSkipSet).contains("foo.jar", "bar.jar");
402+
}
403+
388404
@Override
389405
protected JspServlet getJspServlet() throws ServletException {
390406
Tomcat tomcat = ((TomcatWebServer) this.webServer).getTomcat();

0 commit comments

Comments
 (0)