diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index e2a424f4b..c7097b2b7 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -180,15 +180,9 @@ - ro.isdc.wro4j - wro4j-extensions - 1.10.1 - - - org.webjars.npm - minimatch - - + org.webjars.npm + glob + 7.2.0 org.webjars.npm diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java index ecafd0f6a..bb43d826e 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.regex.Pattern; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.discovery.EurekaClient; @@ -64,6 +65,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.cloud.client.actuator.HasFeatures; @@ -81,6 +83,7 @@ import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.util.ClassUtils; +import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -103,6 +106,11 @@ public class EurekaServerAutoConfiguration implements WebMvcConfigurer { */ private static final String[] EUREKA_PACKAGES = new String[] { "com.netflix.discovery", "com.netflix.eureka" }; + /** + * Static content pattern for dashboard elements (images, css, etc...). + */ + private static final String STATIC_CONTENT_PATTERN = "/(fonts|images|css|js)/.*"; + @Autowired private ApplicationInfoManager applicationInfoManager; @@ -223,19 +231,23 @@ public class EurekaServerAutoConfiguration implements WebMvcConfigurer { } @Bean - public FilterRegistrationBean eurekaVersionFilterRegistration() { + public FilterRegistrationBean eurekaVersionFilterRegistration(ServerProperties serverProperties) { + String contextPath = serverProperties.getServlet().getContextPath(); + String regex = EurekaConstants.DEFAULT_PREFIX + STATIC_CONTENT_PATTERN; + if (StringUtils.hasText(contextPath)) { + regex = contextPath + regex; + } + Pattern staticPattern = Pattern.compile(regex); FilterRegistrationBean bean = new FilterRegistrationBean<>(); bean.setFilter(new OncePerRequestFilter() { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest req = request; - String contextPath = request.getContextPath(); - String pathInfo = request.getPathInfo(); String requestURI = request.getRequestURI(); - String servletPath = request.getServletPath(); - String requestURL = request.getRequestURL().toString(); - if (!requestURI.startsWith(EurekaConstants.DEFAULT_PREFIX + "/v2")) { + if (!requestURI.startsWith(EurekaConstants.DEFAULT_PREFIX + "/v2") + // don't forward static requests (images, js, etc...) to /v2 + && !staticPattern.matcher(requestURI).matches()) { String updatedPath = EurekaConstants.DEFAULT_PREFIX + "/v2" + requestURI.substring(EurekaConstants.DEFAULT_PREFIX.length()); @@ -297,8 +309,7 @@ public class EurekaServerAutoConfiguration implements WebMvcConfigurer { // Construct the Jersey ResourceConfig ResourceConfig rc = new ResourceConfig(classes).property( // Skip static content used by the webapp - ServletProperties.FILTER_STATIC_CONTENT_REGEX, - EurekaConstants.DEFAULT_PREFIX + "/(fonts|images|css|js)/.*"); + ServletProperties.FILTER_STATIC_CONTENT_REGEX, EurekaConstants.DEFAULT_PREFIX + STATIC_CONTENT_PATTERN); rc.register(new ContainerLifecycleListener() { @Override diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java index 47b92f9a6..002bd40ec 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java @@ -19,7 +19,6 @@ package org.springframework.cloud.netflix.eureka.server; import java.util.Collections; import java.util.Map; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; @@ -71,7 +70,6 @@ class ApplicationContextTests { } @Test - @Disabled // FIXME 4.0 void cssAvailable() { ResponseEntity entity = new TestRestTemplate() .getForEntity("http://localhost:" + this.port + "/context/eureka/css/wro.css", String.class); @@ -79,7 +77,6 @@ class ApplicationContextTests { } @Test - @Disabled // FIXME 4.0 void jsAvailable() { ResponseEntity entity = new TestRestTemplate() .getForEntity("http://localhost:" + this.port + "/context/eureka/js/wro.js", String.class); diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationDashboardPathTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationDashboardPathTests.java index fec0688e2..9b1dfe044 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationDashboardPathTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationDashboardPathTests.java @@ -18,7 +18,6 @@ package org.springframework.cloud.netflix.eureka.server; import java.util.Map; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; @@ -64,7 +63,6 @@ class ApplicationDashboardPathTests { } @Test - @Disabled // FIXME 4.0 void cssAvailable() { ResponseEntity entity = new TestRestTemplate() .getForEntity("http://localhost:" + this.port + "/eureka/css/wro.css", String.class); @@ -72,7 +70,6 @@ class ApplicationDashboardPathTests { } @Test - @Disabled // FIXME 4.0 void jsAvailable() { ResponseEntity entity = new TestRestTemplate() .getForEntity("http://localhost:" + this.port + "/eureka/js/wro.js", String.class); diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationServletPathTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationServletPathTests.java index 8aa9ad6d0..5d624a368 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationServletPathTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationServletPathTests.java @@ -19,7 +19,6 @@ package org.springframework.cloud.netflix.eureka.server; import java.util.Collections; import java.util.Map; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; @@ -71,7 +70,6 @@ class ApplicationServletPathTests { } @Test - @Disabled // FIXME 4.0 void cssAvailable() { ResponseEntity entity = new TestRestTemplate() .getForEntity("http://localhost:" + this.port + "/servlet/eureka/css/wro.css", String.class); @@ -79,7 +77,6 @@ class ApplicationServletPathTests { } @Test - @Disabled // FIXME 4.0 void jsAvailable() { ResponseEntity entity = new TestRestTemplate() .getForEntity("http://localhost:" + this.port + "/servlet/eureka/js/wro.js", String.class);