如何针对特定路径重定向到404上的默认资源文件

时间:2019-07-06 06:21:05

标签: java spring spring-boot spring-mvc

我正在将单页应用程序集成到Spring Boot项目中。 UI(SPA)的上下文为http://localhost:8080/ui/

Spring Boot应用程序本身的上下文为http://localhost:8080/。控制器具有与UI上下文无关的不同上下文。

在某些情况下,UI会将浏览器地址行更改为服务器不知道但不向服务器发送请求的URL。之后,如果刷新页面,服务器将响应404。但是,我需要返回默认的index.html页面。

示例:我转到http://localhost:8080/ui/,UI将其更改为http://localhost:8080/ui/mainpage。我刷新页面并得到404。

我找到了类似的question,但是我想做些不同的事情,然后在那回答。

当有对http://localhost:8080/ui/ **的请求时,我需要返回默认资源(index.html),如果对http://localhost:8080/context1/blablabla进行了请求,我想返回404。

在调试和搜索之后,我有了下一个解决方案:


    @Configuration
    public static class WebConfig implements WebMvcConfigurer {

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry
                    .addResourceHandler("/ui/**")
                    .addResourceLocations("/ui/")
                    .resourceChain(false)
                    .addResolver(new PathResourceResolver() {
                        @Override
                        protected Resource getResource(String resourcePath, Resource location) throws IOException {
                            Resource resource = super.getResource(resourcePath, location);
                            return Objects.isNull(resource) ? super.getResource("index.html", location) : resource;
                        }
                    });
        }

        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/ui/").setViewName("index.html");
        }
    }


此处的方法是手动添加PathResourceResolve并覆盖其方法getResource,因此当resource为null时,请调用index.html resource。这样,我可以确定只有在向http://localhost:8080/ui/ **发出请求时,我才返回默认页面,而所有其他请求将照常返回404。

我认为这不是正确的解决方案,在我看来,这就像黑客一样。我以为资源处理程序可能具有默认资源之类的配置,但是我没有发现任何有关此的信息。

我的问题是如何正确执行? 感谢任何建议。

0 个答案:

没有答案