The stack trace below is logged, if our spring boot application is started in a path that contains for example '('. The stack we are using is: thymeleaf together with webjars+jetty

Spring-Boot version: 3.2.4

Caused by: java.io.IOError: java.net.URISyntaxException: Illegal character in path at index 29: nested:/C:/DEV-Install/testaa tst (x86)/service-manager/apps/gateway/gateway-app.jar/!BOOT-INF/lib/i18next-1.11.5.jar
    at org.springframework.boot.loader.nio.file.NestedPath.toUri(NestedPath.java:148)
    at jdk.zipfs/jdk.nio.zipfs.ZipPath.toUri(ZipPath.java:201)
    at org.eclipse.jetty.util.resource.FileSystemPool.mount(FileSystemPool.java:131)
    at org.eclipse.jetty.util.resource.ResourceFactoryInternals$CompositeResourceFactory.mountIfNeeded(ResourceFactoryInternals.java:268)
    at org.eclipse.jetty.util.resource.ResourceFactoryInternals$CompositeResourceFactory.newResource(ResourceFactoryInternals.java:225)
    at org.eclipse.jetty.util.resource.ResourceFactoryInternals$LifeCycle.newResource(ResourceFactoryInternals.java:171)
    at org.eclipse.jetty.util.resource.ResourceFactory.newResource(ResourceFactory.java:370)
    at org.eclipse.jetty.ee10.servlet.ServletContextHandler$ServletContextApi.getResourceAsStream(ServletContextHandler.java:2834)
    at org.springframework.web.context.support.ServletContextResource.isReadable(ServletContextResource.java:120)
    at org.springframework.web.servlet.resource.PathResourceResolver.getResource(PathResourceResolver.java:190)
    at org.springframework.web.servlet.resource.PathResourceResolver.getResource(PathResourceResolver.java:159)
    at org.springframework.web.servlet.resource.PathResourceResolver.resolveUrlPathInternal(PathResourceResolver.java:149)
    at org.springframework.web.servlet.resource.AbstractResourceResolver.resolveUrlPath(AbstractResourceResolver.java:53)
    at org.springframework.web.servlet.resource.DefaultResourceResolverChain.resolveUrlPath(DefaultResourceResolverChain.java:82)
    at org.springframework.web.servlet.resource.WebJarsResourceResolver.resolveUrlPathInternal(WebJarsResourceResolver.java:96)
    at org.springframework.web.servlet.resource.AbstractResourceResolver.resolveUrlPath(AbstractResourceResolver.java:53)
    at org.springframework.web.servlet.resource.DefaultResourceResolverChain.resolveUrlPath(DefaultResourceResolverChain.java:82)
    at org.springframework.web.servlet.resource.CachingResourceResolver.resolveUrlPathInternal(CachingResourceResolver.java:172)
    at org.springframework.web.servlet.resource.AbstractResourceResolver.resolveUrlPath(AbstractResourceResolver.java:53)
    at org.springframework.web.servlet.resource.DefaultResourceResolverChain.resolveUrlPath(DefaultResourceResolverChain.java:82)
    at org.springframework.web.servlet.resource.ResourceUrlProvider.getForLookupPath(ResourceUrlProvider.java:245)
    at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper.resolveUrlPath(ResourceUrlEncodingFilter.java:126)
    at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingResponseWrapper.encodeURL(ResourceUrlEncodingFilter.java:159)
    at org.thymeleaf.web.servlet.JakartaServletWebExchange.transformURL(JakartaServletWebExchange.java:124)
    at org.thymeleaf.linkbuilder.StandardLinkBuilder.processLink(StandardLinkBuilder.java:547)
    at org.thymeleaf.linkbuilder.StandardLinkBuilder.buildLink(StandardLinkBuilder.java:138)
    at org.thymeleaf.context.AbstractEngineContext.buildLink(AbstractEngineContext.java:167)
    at org.thymeleaf.standard.expression.LinkExpression.executeLinkExpression(LinkExpression.java:292)
    at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:85)
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109)
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138)
    at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144)
    at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
    at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)
    at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633)
    at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314)
    at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205)
    at org.thymeleaf.engine.TemplateModel.process(TemplateModel.java:136)
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:592)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077)
    at org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372)
    at org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1431)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1167)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106)
    ... 146 common frames omitted
 Caused by: java.net.URISyntaxException: Illegal character in path at index 29: nested:/C:/DEV-Install/testaa tst (x86)/service-manager/apps/gateway/gateway-app.jar/!BOOT-INF/lib/i18next-1.11.5.jar
    at java.base/java.net.URI$Parser.fail(URI.java:2974)
    at java.base/java.net.URI$Parser.checkChars(URI.java:3145)
    at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3227)
    at java.base/java.net.URI$Parser.parse(URI.java:3175)
    at java.base/java.net.URI.<init>(URI.java:623)
    at org.springframework.boot.loader.nio.file.NestedPath.toUri(NestedPath.java:145)
    ... 191 common frames omitted

Comment From: philwebb

@mhalbritter has noticed I've got this logic wrong and we should be using !isAllowed.