From 74a8486f003f8b2ce5d3bdef85632868a3710b69 Mon Sep 17 00:00:00 2001 From: skublik Date: Mon, 18 Jun 2018 13:12:35 +0200 Subject: [PATCH] upgrading of Spring boot to 2.0.1 --- build-system/pom.xml | 2 +- gui/admin-gui/pom.xml | 3 +- .../boot/EmbeddedTomcatAutoConfiguration.java | 15 +- .../web/boot/MidPointSpringApplication.java | 211 +++++++++++++----- ...idPointTomcatServletWebServerFactory.java} | 17 +- .../midpoint/web/boot/RootRootContext.java | 2 +- .../src/main/resources/application.yml | 14 +- 7 files changed, 182 insertions(+), 82 deletions(-) rename gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/{MidPointTomcatEmbeddedServletContainerFactory.java => MidPointTomcatServletWebServerFactory.java} (70%) diff --git a/build-system/pom.xml b/build-system/pom.xml index 9c3cc659663..89805b97446 100644 --- a/build-system/pom.xml +++ b/build-system/pom.xml @@ -63,7 +63,7 @@ 1.0.1 1.7.25 1.2.3 - 1.5.8.e1 5.0.5.RELEASE 5.0.5.RELEASE diff --git a/gui/admin-gui/pom.xml b/gui/admin-gui/pom.xml index a8d4a7955a8..33b4d518d05 100644 --- a/gui/admin-gui/pom.xml +++ b/gui/admin-gui/pom.xml @@ -122,6 +122,7 @@ + org.springframework.boot @@ -210,7 +211,7 @@ org.webjars webjars-locator-core - 0.32 + 0.35 ro.isdc.wro4j diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/EmbeddedTomcatAutoConfiguration.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/EmbeddedTomcatAutoConfiguration.java index 72c184ca9b1..96438fe6d2b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/EmbeddedTomcatAutoConfiguration.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/EmbeddedTomcatAutoConfiguration.java @@ -23,9 +23,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.SearchStrategy; -import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration.BeanPostProcessorsRegistrar; -import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; -import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -37,7 +38,7 @@ /** * Custom configuration (factory) for embedded tomcat factory. * This is necessary, as the tomcat factory is hacking tomcat setup. - * @see MidPointTomcatEmbeddedServletContainerFactory + * @see MidPointTomcatServletWebServerFactory * * @author semancik */ @@ -51,12 +52,12 @@ public class EmbeddedTomcatAutoConfiguration { @Configuration @ConditionalOnClass({ Servlet.class, Tomcat.class }) - @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT) + @ConditionalOnMissingBean(value = TomcatServletWebServerFactory.class, search = SearchStrategy.CURRENT) public static class EmbeddedTomcat { @Bean - public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() { - return new MidPointTomcatEmbeddedServletContainerFactory(); + public TomcatServletWebServerFactory tomcatEmbeddedServletContainerFactory() { + return new MidPointTomcatServletWebServerFactory(); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java index 1c2ea984551..e0952a5f398 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointSpringApplication.java @@ -24,6 +24,7 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.util.MidPointProfilingServletFilter; + import org.apache.catalina.Valve; import org.apache.commons.lang.StringUtils; import org.apache.cxf.transport.servlet.CXFServlet; @@ -36,22 +37,36 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; -import org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration; +import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration; import org.springframework.boot.autoconfigure.web.*; +import org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration; +import org.springframework.boot.autoconfigure.web.embedded.TomcatWebServerFactoryCustomizer; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; -import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; -import org.springframework.boot.web.servlet.ErrorPage; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.server.ErrorPage; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; -import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.boot.web.servlet.server.Session; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextListener; import org.springframework.web.filter.DelegatingFilterProxy; import ro.isdc.wro.http.WroFilter; @@ -60,7 +75,7 @@ import java.io.File; import java.lang.management.ManagementFactory; -import java.util.concurrent.TimeUnit; +import java.time.Duration; /** * Created by Viliam Repan (lazyman). @@ -91,18 +106,20 @@ }) @ImportAutoConfiguration(classes = { EmbeddedTomcatAutoConfiguration.class, - DispatcherServletAutoConfiguration.class, - WebMvcAutoConfiguration.class, - HttpMessageConvertersAutoConfiguration.class, - PropertyPlaceholderAutoConfiguration.class, - SecurityAutoConfiguration.class, - SecurityFilterAutoConfiguration.class, - ServerPropertiesAutoConfiguration.class, - MultipartAutoConfiguration.class + DispatcherServletAutoConfiguration.class, + WebMvcAutoConfiguration.class, + HttpMessageConvertersAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class, + SecurityAutoConfiguration.class, + SecurityFilterAutoConfiguration.class, + EmbeddedWebServerFactoryCustomizerAutoConfiguration.class, +// ServerPropertiesAutoConfiguration.class, + MultipartAutoConfiguration.class }) +//@EnableConfigurationProperties(ServerProperties.class) @SpringBootConfiguration public class MidPointSpringApplication extends SpringBootServletInitializer { - + private static final Trace LOGGER = TraceManager.getTrace(MidPointSpringApplication.class); private static final String MIDPOINT_HOME_PROPERTY = "midpoint.home"; @@ -162,13 +179,14 @@ private static SpringApplicationBuilder configureApplication(SpringApplicationBu System.setProperty(MIDPOINT_HOME_PROPERTY, mpHome); } - System.setProperty("spring.config.location", "${midpoint.home}/"); + //TODO Could not resolve placeholder +// System.setProperty("spring.config.location", "${midpoint.home}/"); application.bannerMode(Banner.Mode.LOG); return application.sources(MidPointSpringApplication.class); } - + @Bean public ServletListenerRegistrationBean requestContextListener() { return new ServletListenerRegistrationBean(new RequestContextListener()); @@ -195,6 +213,11 @@ public FilterRegistrationBean wicket() { return registration; } + + @Bean + public DelegatingFilterProxy delegatingFilterProxy() { + return new DelegatingFilterProxy(); + } @Bean public FilterRegistrationBean springSecurityFilterChain() { @@ -241,44 +264,116 @@ public ServletRegistrationBean staticWebServlet() { registration.addUrlMappings("/static-web/*"); return registration; } - - @Bean - public ServerProperties serverProperties() { - return new ServerCustomization(); - } - - private static class ServerCustomization extends ServerProperties { - - @Value("${server.session.timeout}") - private int sessionTimeout; - - @Override - public void customize(ConfigurableEmbeddedServletContainer container) { - super.customize(container); - - container.addErrorPages(new ErrorPage(HttpStatus.UNAUTHORIZED, - "/error/401")); - container.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, - "/error/403")); - container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, - "/error/404")); - container.addErrorPages(new ErrorPage(HttpStatus.GONE, - "/error/410")); - container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, - "/error")); - - container.setSessionTimeout(sessionTimeout, TimeUnit.MINUTES); - - if (container instanceof TomcatEmbeddedServletContainerFactory) { - customizeTomcat((TomcatEmbeddedServletContainerFactory) container); - } - } - - private void customizeTomcat(TomcatEmbeddedServletContainerFactory tomcatFactory) { - // Tomcat valve used to redirect root URL (/) to real application URL (/midpoint/). - // See comments in TomcatRootValve - Valve rootValve = new TomcatRootValve(); - tomcatFactory.addEngineValves(rootValve); - } - } + +// @Value("${server.servlet.session.timeout}") +// private int sessionTimeout; +// +// @Bean +// public void serverProperties(ConfigurableServletWebServerFactory server) { +// server.addErrorPages(new ErrorPage(HttpStatus.UNAUTHORIZED, +// "/error/401")); +// server.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, +// "/error/403")); +// server.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, +// "/error/404")); +// server.addErrorPages(new ErrorPage(HttpStatus.GONE, +// "/error/410")); +// server.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, +// "/error")); +// +// Session session = new Session(); +// session.setTimeout(Duration.ofSeconds(sessionTimeout)); +// server.setSession(session);//.setSessionTimeout(sessionTimeout, TimeUnit.MINUTES); +// +// if (server instanceof TomcatServletWebServerFactory) { +// customizeTomcat((TomcatServletWebServerFactory) server); +// } +// } +// +// private void customizeTomcat(TomcatServletWebServerFactory tomcatFactory) { +// // Tomcat valve used to redirect root URL (/) to real application URL (/midpoint/). +// // See comments in TomcatRootValve +// Valve rootValve = new TomcatRootValve(); +// tomcatFactory.addEngineValves(rootValve); +// } + +// private static class ServerCustomization implements WebServerFactoryCustomizer { +// +// +// +// @Value("${server.servlet.session.timeout}") +// private int sessionTimeout; +// +// +// @Override +// public void customize(ConfigurableServletWebServerFactory server) { +// LOGGER.info("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sessionTimeout: {} ", sessionTimeout); +// +// server.addErrorPages(new ErrorPage(HttpStatus.UNAUTHORIZED, +// "/error/401")); +// server.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, +// "/error/403")); +// server.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, +// "/error/404")); +// server.addErrorPages(new ErrorPage(HttpStatus.GONE, +// "/error/410")); +// server.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, +// "/error")); +// +// Session session = new Session(); +// session.setTimeout(Duration.ofSeconds(sessionTimeout)); +// server.setSession(session);//.setSessionTimeout(sessionTimeout, TimeUnit.MINUTES); +// +// if (server instanceof TomcatServletWebServerFactory) { +// customizeTomcat((TomcatServletWebServerFactory) server); +// } +// } +// +// private void customizeTomcat(TomcatServletWebServerFactory tomcatFactory) { +// // Tomcat valve used to redirect root URL (/) to real application URL (/midpoint/). +// // See comments in TomcatRootValve +// Valve rootValve = new TomcatRootValve(); +// tomcatFactory.addEngineValves(rootValve); +// } +// } + +// @Bean +// public ServerProperties serverProperties() { +// return new ServerCustomization(); +// } +// +// private static class ServerCustomization extends ServerProperties { +// +// @Value("${server.session.timeout}") +// private int sessionTimeout; +// +// @Override +// public void customize(ConfigurableEmbeddedServletContainer container) { +// super.customize(container); +// +// container.addErrorPages(new ErrorPage(HttpStatus.UNAUTHORIZED, +// "/error/401")); +// container.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, +// "/error/403")); +// container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, +// "/error/404")); +// container.addErrorPages(new ErrorPage(HttpStatus.GONE, +// "/error/410")); +// container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, +// "/error")); +// +// container.setSessionTimeout(sessionTimeout, TimeUnit.MINUTES); +// +// if (container instanceof TomcatEmbeddedServletContainerFactory) { +// customizeTomcat((TomcatEmbeddedServletContainerFactory) container); +// } +// } +// +// private void customizeTomcat(TomcatEmbeddedServletContainerFactory tomcatFactory) { +// // Tomcat valve used to redirect root URL (/) to real application URL (/midpoint/). +// // See comments in TomcatRootValve +// Valve rootValve = new TomcatRootValve(); +// tomcatFactory.addEngineValves(rootValve); +// } +// } } \ No newline at end of file diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointTomcatEmbeddedServletContainerFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointTomcatServletWebServerFactory.java similarity index 70% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointTomcatEmbeddedServletContainerFactory.java rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointTomcatServletWebServerFactory.java index 9a7d7bd49ba..8ad5626631b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointTomcatEmbeddedServletContainerFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/MidPointTomcatServletWebServerFactory.java @@ -16,8 +16,8 @@ package com.evolveum.midpoint.web.boot; import org.apache.catalina.startup.Tomcat; -import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer; -import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.embedded.tomcat.TomcatWebServer; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; @@ -28,12 +28,13 @@ * * @author semancik */ -public class MidPointTomcatEmbeddedServletContainerFactory extends TomcatEmbeddedServletContainerFactory { +public class MidPointTomcatServletWebServerFactory extends TomcatServletWebServerFactory { - private static final Trace LOGGER = TraceManager.getTrace(MidPointTomcatEmbeddedServletContainerFactory.class); + private static final Trace LOGGER = TraceManager.getTrace(MidPointTomcatServletWebServerFactory.class); @Override - protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) { + + protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) { // We are setting up fake context here. This context does not really do anything. // But it is "mapped" to the root URL (/ ... or rather "" in Tomcat parlance). @@ -41,10 +42,10 @@ protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomca // CoyoteAdapter will not execute any Valves and returns 404 immediately. // So without this the TomcatRootValve will not work. - RootRootContext rootRootContext = new RootRootContext(); - tomcat.getHost().addChild(rootRootContext); +// RootRootContext rootRootContext = new RootRootContext(); +// tomcat.getHost().addChild(rootRootContext); - return super.getTomcatEmbeddedServletContainer(tomcat); + return super.getTomcatWebServer(tomcat); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/RootRootContext.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/RootRootContext.java index b8a7526e637..ba6b3aebae3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/RootRootContext.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/boot/RootRootContext.java @@ -31,7 +31,7 @@ public class RootRootContext extends StandardContext { public RootRootContext() { super(); - setPath(""); // this means "/" + setPath("/ "); // this means "/" setDisplayName("RootRoot"); } diff --git a/gui/admin-gui/src/main/resources/application.yml b/gui/admin-gui/src/main/resources/application.yml index 50ddd1e7a24..78358c4b56e 100644 --- a/gui/admin-gui/src/main/resources/application.yml +++ b/gui/admin-gui/src/main/resources/application.yml @@ -2,23 +2,25 @@ spring: application: name: MidPoint - http: + servlet: multipart: max-file-size: 100Mb max-request-size: 100Mb server: - display-name: MidPoint - contextPath: /midpoint # Spring Boot 1.x - session: - timeout: 15 # in minutes. By default spring uses seconds, but tomcat/container (not embedded) uses this value - # as minutes - so we end up with never expiring session. + #display-name: MidPoint + #contextPath: /midpoint # Spring Boot 1.x + tomcat: basedir: ${midpoint.home} max-http-post-size: 104857600 # in bytes servlet: path: /midpoint # Spring Boot 2.0 + application-display-name: MidPoint + session: + timeout: 540 #15 # in minutes. By default spring uses seconds, but tomcat/container (not embedded) uses this value + # as minutes - so we end up with never expiring session. auth: logout: