diff --git a/server/src/main/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilter.java b/server/src/main/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilter.java index e1f89b358e1..69e2302ed0e 100644 --- a/server/src/main/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilter.java +++ b/server/src/main/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilter.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.cloudfoundry.identity.uaa.zone; +import org.cloudfoundry.identity.uaa.util.UaaUrlUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; @@ -36,6 +37,7 @@ public class IdentityZoneResolvingFilter extends OncePerRequestFilter implements InitializingBean { private final IdentityZoneProvisioning dao; + private final Set staticResources = Set.of("/resources/", "/vendor/font-awesome/"); private Set defaultZoneHostnames = new HashSet<>(); private Logger logger = LoggerFactory.getLogger(getClass()); @@ -63,7 +65,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } if (identityZone == null) { // skip filter to static resources in order to serve images and css in case of invalid zones - boolean isStaticResource = request.getRequestURI().startsWith("/resources/") || request.getRequestURI().startsWith("/uaa/resources/"); + boolean isStaticResource = staticResources.stream().anyMatch(UaaUrlUtils.getRequestPath(request)::startsWith); if(isStaticResource) { filterChain.doFilter(request, response); return; diff --git a/server/src/test/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilterTests.java b/server/src/test/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilterTests.java index f69b3dbbd88..22287d73a09 100644 --- a/server/src/test/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilterTests.java +++ b/server/src/test/java/org/cloudfoundry/identity/uaa/zone/IdentityZoneResolvingFilterTests.java @@ -90,21 +90,25 @@ void doNotThrowException_InCase_RetrievingZoneFails() throws Exception { @Test public void serveStaticContent_InCase_RetrievingZoneFails_local() throws Exception { - checkStaticContent("/uaa/resources/css/application.css"); + checkStaticContent("/uaa", "/resources/css/application.css"); + checkStaticContent("/uaa", "/vendor/font-awesome/css/font-awesome.min.css"); } @Test public void serveStaticContent_InCase_RetrievingZoneFails() throws Exception { - checkStaticContent("/resources/css/application.css"); + checkStaticContent(null, "/resources/css/application.css"); + checkStaticContent(null, "/vendor/font-awesome/css/font-awesome.min.css"); } - private void checkStaticContent(String path) throws Exception { + private void checkStaticContent(String context, String path) throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); String incomingSubdomain = "not_a_zone"; String uaaHostname = "uaa.mycf.com"; String incomingHostname = incomingSubdomain+"."+uaaHostname; request.setServerName(incomingHostname); - request.setRequestURI(path); + request.setRequestURI(context + path); + request.setContextPath(context); + request.setServletPath(path); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain filterChain = new MockFilterChain() {