在 Spring Boot 中将未知请求重定向到 index.html

Posted

技术标签:

【中文标题】在 Spring Boot 中将未知请求重定向到 index.html【英文标题】:Redirect unknown requests to index.html in springboot 【发布时间】:2017-08-09 10:58:56 【问题描述】:

我正在尝试通过 springboot Web 应用程序提供 Angular2 应用程序。我找到了很多非常简单的示例:

https://spring.io/blog/2015/01/12/spring-and-angular-js-a-secure-single-page-application#using-spring-boot-cli

https://github.com/zouabimourad/angular2-spring/tree/master/front

https://github.com/ehirsch/spring-angular2

但是,这些示例非常简单,它们基本上只是展示了如何显示恰好是 Angular 的静态内容。

它们都没有展示如何处理 Angular2 应用使用的任何不映射到“真实”资源的 URL(我认为它们被称为路由)。

例如。我们在 Angular 应用程序中有一个“/login”路由,但我们没有 @Controller/@RequestMapping("/login") 用于此,我希望 Spring 在看到对“/”的请求时呈现 index.html登录”。

一般来说 - 我希望 Spring 在它不能成为实际资源时呈现“index.html”。有没有办法为所有无法映射或找到的请求设置默认视图?

我之前使用 htaccess 文件解决了这个问题,并让 apache 处理这个问题:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %REQUEST_FILENAME !-d
   RewriteCond %REQUEST_FILENAME !-f
   RewriteRule . index.html [L]
   ErrorDocument 404 /index.html
</IfModule>

但在这种情况下我不能使用 apache 或 nginx

【问题讨论】:

【参考方案1】:

作为一个循环工作,我在RequestMapping 注释中添加了Angular Routes,并将它们全部指向index.html

@RequestMapping("/login", "/logout")
public String index()  return "index.html"; 

编辑:作为一个更好的工作循环,您可以让控制器实现ErrorController,覆盖getErrorPath 方法,然后为/error 添加一个映射,它将作为一个包罗万象(或映射缺少)方法。

@Controller
public class TheOneController implements ErrorController 

    @RequestMapping("/error")
    public String index() 
        return "index.html";
    

    @Override
    public String getErrorPath() 
        return "index.html";
    

现在index 方法将处理任何无法找到的内容并呈现index.html

【讨论】:

以上是关于在 Spring Boot 中将未知请求重定向到 index.html的主要内容,如果未能解决你的问题,请参考以下文章

在 spring 控制器的重定向中将请求方法从 POST 更改为 GET

执行登录保存请求后,Spring Boot Security POST 重定向到登录页面

在 Spring Boot 中创建 PROXY 服务,监听多个端口,并将 GET 请求重定向到新 URL

(spring-boot) http 到 https 重定向,405 方法不允许消息

Spring boot zuul错误重定向请求

在 Spring Boot 中将 HTTP 定向到代理后面的 HTTPS