当前位置: 首页 > 知识库问答 >
问题:

为SPA前端配置Spring Boot(5.3)布线

焦学海
2023-03-14

我有一个简单的前端应用程序,使用Angular。所有路由都是由Angular处理的,所以我希望Spring boot将所有页面流量转发到Angular路由可以处理它们。

stackoverflow中已经有一些已知的答案。它们是:

  • 任何url上的spring boot单页应用程序路由
  • 为spa前端配置spring boot
  • spring-boot-with-redirecting-with-single-page-angular2

但是它们都不能再工作了,因为从Spring Framework 5.3及以后,AntPathMatcher已经被PathPattern所取代<代码>路径模式与AntPathMatcher语法兼容,但以下情况除外:

仅允许在模式末尾支持“**”进行多段匹配。这有助于在为给定请求选择最接近的匹配时消除大多数歧义原因。

所以这不会再起作用了:

  // Match everything without a suffix (so not a static resource)
  @RequestMapping(value = "/**/{path:[^.]*}")
  public String redirectAngularRoutes() {
    return "forward:/";
  }

那么,从Spring Framework 5.3开始,现在最好的方法是什么呢?

我们是否指定每个角度布线,并将它们转发到下面这样的位置,还是有其他替代方案?

java prettyprint-override">  @RequestMapping({ "/help/**","/view/**","/admin/**" })
  public String redirectAngularRoutes() {
    return "forward:/";
  }

共有2个答案

单于正业
2023-03-14

您可以配置路径匹配策略,以便在应用程序中使用ant路径匹配器。yml公司

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

Ant路径匹配器上目前没有弃用警告,但它似乎可能在将来被删除。

漆雕深
2023-03-14

不久前,我在互联网的某个不起眼的地方发现了一种不同的方法,但我还没有设法追溯我的步骤来给予应有的赞扬。向原作者道歉。

在任何情况下,这就是所提出的解决方案,目前看来效果不错。

import org.springframework.web.filter.OncePerRequestFilter
import javax.servlet.FilterChain
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse


class AngularRoutingFilter : OncePerRequestFilter() {


    override fun doFilterInternal(
            request: HttpServletRequest,
            response: HttpServletResponse,
            filterChain: FilterChain
    ) {

        val mode = request.getHeader("Sec-Fetch-Mode")

        when (mode) {
            "navigate" -> {
                val rd = request.getRequestDispatcher("/")
                rd.forward(request, response)
            }
            else -> filterChain.doFilter(request, response)
        }

    }


}

这种方法的缺点是它依赖于客户端设置正确的标头。我发现当运行Cypress测试时,没有正确进行,我不得不像这样覆盖cy.visit命令...

Cypress.Commands.overwrite('visit', (originalFn, url, options) => {
    originalFn(
        url,
        {
            headers: {
                'Sec-Fetch-Mode': 'navigate'
            },
            ...options
        }
    )
})
 类似资料:
  • 问题内容: 我有整个前端部分都放在资源中的应用程序。我想分开分开。并有单独的UI服务器,例如,由gulp提供。 因此,我假设我的服务器应该为客户端呈现的所有请求返回。 例如:我有’user /:id’路由,该路由通过角度路由进行管理,不需要任何服务器。我如何配置以便服务器不会重新加载或将我重定向到任何地方? 我的安全配置如下(不知道它是否负责此类事情): 问题答案: 对于路由,根据(具体在此处)的

  • 5.3 Linux目录配置 在了解了每个文件的相关种类与属性,以及了解了如何更改文件属性/权限的相关信息后,再来要了解的就是, 为什么每套Linux distributions他们的配置文件啊、可执行文件啊、每个目录内放置的咚咚啊,其实都差不多? 原来是有一套标准依据的哩!我们下面就来瞧一瞧。 5.3.1 Linux目录配置的依据--FHS 因为利用Linux来开发产品或distributions

  • 我刚开始穿弹力靴。这就是我要解决的问题。我有一个application.yml文件,它具有以下属性: 我尝试使用以下代码访问KinesisSenderFeature的值: 以及 PropertySourcesPlaceHolderConfigureer bean定义为: 是的,我确实看到了: 将Yaml中的列表映射到Spring Boot中的对象列表 Spring boot YAML配置未读取所有

  • <dependencyManagement> <dependencies> <dependency> <!--Import dependency management from SpringBoot--> <groupId>org.springframework.boot</groupId>

  • 请教echarts像这种有虚线的柱状图该怎么配置,翻阅了资料也没有达到这个效果

  • 前端构建配置就是 coolie-cli 的配置文件,文件命名为coolie.config.js,使用 coolie init -c 生成一个前端构建配置文件的模板。 /** * ====================================================== * coolie-cli 配置文件 `coolie.config.js` * 使用 `coolie.in