From dbf0bcca63d8cdfa1d6a76dd3c7673ac1e864fd5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 10 May 2022 12:32:28 +0100 Subject: [PATCH] Avoid reflection when Tomcat's configuring Context's ClassLoader Closes gh-30904 --- .../embedded/tomcat/TomcatReactiveWebServerFactory.java | 5 +++-- .../web/embedded/tomcat/TomcatServletWebServerFactory.java | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactory.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactory.java index 6a76e0be7b..874e2ed0d8 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactory.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactory.java @@ -152,10 +152,11 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac context.setPath(""); context.setDocBase(docBase.getAbsolutePath()); context.addLifecycleListener(new Tomcat.FixContextListener()); - context.setParentClassLoader(ClassUtils.getDefaultClassLoader()); + ClassLoader parentClassLoader = ClassUtils.getDefaultClassLoader(); + context.setParentClassLoader(parentClassLoader); skipAllTldScanning(context); WebappLoader loader = new WebappLoader(); - loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName()); + loader.setLoaderInstance(new TomcatEmbeddedWebappClassLoader(parentClassLoader)); loader.setDelegate(true); context.setLoader(loader); Tomcat.addServlet(context, "httpHandlerServlet", servlet).setAsyncSupported(true); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java index 2f3eda5b2b..2035cef9fb 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java @@ -229,8 +229,9 @@ public class TomcatServletWebServerFactory extends AbstractServletWebServerFacto File docBase = (documentRoot != null) ? documentRoot : createTempDir("tomcat-docbase"); context.setDocBase(docBase.getAbsolutePath()); context.addLifecycleListener(new FixContextListener()); - context.setParentClassLoader((this.resourceLoader != null) ? this.resourceLoader.getClassLoader() - : ClassUtils.getDefaultClassLoader()); + ClassLoader parentClassLoader = (this.resourceLoader != null) ? this.resourceLoader.getClassLoader() + : ClassUtils.getDefaultClassLoader(); + context.setParentClassLoader(parentClassLoader); resetDefaultLocaleMapping(context); addLocaleMappings(context); try { @@ -241,7 +242,7 @@ public class TomcatServletWebServerFactory extends AbstractServletWebServerFacto } configureTldPatterns(context); WebappLoader loader = new WebappLoader(); - loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName()); + loader.setLoaderInstance(new TomcatEmbeddedWebappClassLoader(parentClassLoader)); loader.setDelegate(true); context.setLoader(loader); if (isRegisterDefaultServlet()) {