Skip to content

Commit

Permalink
upgrading of Spring framework to 5.0.5 and Spring boot to 2.0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Jun 13, 2018
1 parent baa4029 commit e5a2da5
Show file tree
Hide file tree
Showing 15 changed files with 221 additions and 85 deletions.
12 changes: 8 additions & 4 deletions build-system/pom.xml
Expand Up @@ -63,10 +63,9 @@
<selenium.version>1.0.1</selenium.version>
<slf4j.version>1.7.25</slf4j.version>
<logback.version>1.2.3</logback.version>
<spring.boot.version>1.5.8.e1</spring.boot.version> <!-- can be replaced by a stock version;
ideally after https://github.com/spring-projects/spring-boot/issues/11367 is resolved but it should be OK even before that -->
<spring.version>4.3.14.RELEASE</spring.version>
<spring.security.version>4.2.4.RELEASE</spring.security.version>
<spring.boot.version>2.0.1.RELEASE</spring.boot.version>
<spring.version>5.0.5.RELEASE</spring.version>
<spring.security.version>5.0.5.RELEASE</spring.security.version>
<cas.client.version>3.5.0</cas.client.version>
<testng.version>6.8.8</testng.version>
<xml.resolver.version>1.2</xml.resolver.version>
Expand Down Expand Up @@ -830,6 +829,11 @@
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
Expand Down
17 changes: 11 additions & 6 deletions gui/admin-gui/pom.xml
Expand Up @@ -210,7 +210,7 @@
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator-core</artifactId>
<version>0.32</version>
<version>0.35</version>
</dependency>
<dependency>
<groupId>ro.isdc.wro4j</groupId>
Expand Down Expand Up @@ -404,11 +404,6 @@
<artifactId>spring-aspects</artifactId>
<scope>runtime</scope>
</dependency>
<dependency> <!-- needed as runtime dependency otherwise spring won't start -->
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
Expand Down Expand Up @@ -544,6 +539,10 @@
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>

<!-- SPRING SECURITY -->
<dependency>
Expand Down Expand Up @@ -721,6 +720,7 @@
</dependency>

<!-- TEST -->

<dependency>
<groupId>com.evolveum.midpoint.infra</groupId>
<artifactId>test-util</artifactId>
Expand Down Expand Up @@ -756,6 +756,11 @@
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<scope>test</scope>
</dependency>

<!-- Dependencies to connectors, just to add to good place in WAR -->
<dependency>
Expand Down
Expand Up @@ -23,9 +23,8 @@
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.BeanPostProcessorsRegistrar;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
Expand All @@ -51,11 +50,11 @@ 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() {
public TomcatServletWebServerFactory tomcatEmbeddedServletContainerFactory() {
return new MidPointTomcatEmbeddedServletContainerFactory();
}

Expand Down
Expand Up @@ -37,21 +37,32 @@
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
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.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.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.context.annotation.PropertySource;
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;
Expand Down Expand Up @@ -97,7 +108,7 @@
PropertyPlaceholderAutoConfiguration.class,
SecurityAutoConfiguration.class,
SecurityFilterAutoConfiguration.class,
ServerPropertiesAutoConfiguration.class,
// ServerPropertiesAutoConfiguration.class,
MultipartAutoConfiguration.class
})
@SpringBootConfiguration
Expand Down Expand Up @@ -195,11 +206,17 @@ public FilterRegistrationBean wicket() {

return registration;
}

private DelegatingFilterProxy delegatingFilterProxy = new DelegatingFilterProxy();

@Bean DelegatingFilterProxy delegatingFilterProxy(){
return delegatingFilterProxy;
}

@Bean
public FilterRegistrationBean springSecurityFilterChain() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new DelegatingFilterProxy());
registration.setFilter(delegatingFilterProxy);
registration.addUrlPatterns("/*");
return registration;
}
Expand All @@ -211,7 +228,7 @@ public FilterRegistrationBean webResourceOptimizer(WroFilter wroFilter) {
registration.addUrlPatterns("/wro/*");
return registration;
}

@Bean
public ServletRegistrationBean cxfServlet() {
ServletRegistrationBean registration = new ServletRegistrationBean();
Expand Down Expand Up @@ -241,44 +258,96 @@ 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) {

@Component
@PropertySource("classpath:application.yml")
@EnableConfigurationProperties(ServerProperties.class)
private static class ServerCustomization implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {



// @Value("${server.servlet.session.timeout}")
// private int sessionTimeout;

@Autowired
private ServerProperties serverProperties;

@Autowired
private ApplicationContext context;

@Override
public void customize(ConfigurableServletWebServerFactory server) {
// LOGGER.info("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX parent.getApplicationName {} ", context.getParent().getApplicationName());

ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer = new ServletWebServerFactoryCustomizer(this.serverProperties);
servletWebServerFactoryCustomizer.customize(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(MidPointSpringApplication.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);
// }
// }
}
Expand Up @@ -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;
Expand All @@ -28,12 +28,12 @@
*
* @author semancik
*/
public class MidPointTomcatEmbeddedServletContainerFactory extends TomcatEmbeddedServletContainerFactory {
public class MidPointTomcatEmbeddedServletContainerFactory extends TomcatServletWebServerFactory {

private static final Trace LOGGER = TraceManager.getTrace(MidPointTomcatEmbeddedServletContainerFactory.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).
Expand All @@ -44,7 +44,7 @@ protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomca
RootRootContext rootRootContext = new RootRootContext();
tomcat.getHost().addChild(rootRootContext);

return super.getTomcatEmbeddedServletContainer(tomcat);
return super.getTomcatWebServer(tomcat);
}


Expand Down
Expand Up @@ -31,7 +31,7 @@ public class RootRootContext extends StandardContext {

public RootRootContext() {
super();
setPath(""); // this means "/"
setPath("/ "); // this means "/"
setDisplayName("RootRoot");
}

Expand Down
20 changes: 13 additions & 7 deletions gui/admin-gui/src/main/resources/application.yml
Expand Up @@ -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:
Expand All @@ -28,4 +30,8 @@ auth:
# enable-csrf: false # default for midpoint is true

# more properties with default values can be found here:
# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
# https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

logging:
level:
org.springframework: TRACE

0 comments on commit e5a2da5

Please sign in to comment.