小编典典

Spring Boot应用程序中多个Angular客户端的RequestMapping问题

spring-boot

我需要处理一些GET请求才能转发到多个Angular客户端。

https://example.com/web/index.html    // Client 1
https://example.com/admin/index.html  // Client 2

由于我不想使用碎片化的(#-ed)路径,因此/web变得相当麻烦。

这是我目前 无法使用的 解决方案:

@Controller
public class ForwardController {

    @RequestMapping(value = "/*", method = RequestMethod.GET)
    public String redirectRoot(HttpServletRequest request) {

        String req = request.getRequestURI();

        if (req.startsWith("/admin/")) {
            return this.redirectAdminTool(request);
        }

        return "forward:/web/index.html";
    }

    @RequestMapping(value = "/web/{path:[^.]*}", method = RequestMethod.GET)
    public String redirectWeb(HttpServletRequest request) {
        return "forward:/web/index.html";
    }

    @RequestMapping(value = "/admin/{path:[^.]*}", method = RequestMethod.GET)
    public String redirectAdminTool(HttpServletRequest request) {
        return "forward:/admin/index.html";
    }
}

有了这个,什么工作是访问例如

  • /web/pricing

但是无法访问的是

  • /web/pricing/vienna

我可以/web/pricing通过浏览器访问,单击“ 刷新 ”,一切正常。但事实并非如此/web/pricing/vienna

现在,我无法弄清楚如何处理请求以及如何转发请求以使子路径也/web/pricing/vienna能正常工作。

有什么办法可以使这项工作吗?

如果我将@RequestMapping路径更改为类似的内容,/web/**则整个过程将陷入无休止的循环并破坏服务器。


我可能需要的是这样的表达式:

/web(/[^\\.]*)

这将导致

MATCH:    /web/pricing
MATCH:    /web/specials/city
MATCH:    /web/specials/city/street
NO MATCH: /web/index.html

但是,Spring不喜欢此正则表达式: /web(/[^\\.]*)

最后,这个问题归结为找到一种方法来匹配除静态资源以外的所有内容/web


阅读 305

收藏
2020-05-30

共1个答案

小编典典

这是我最终要做的事情:

我将两个客户端都移到了一个子目录a/

static/a/web
static/a/admin

此外,我实现了ForwardController这样的代码:

@Controller
public class ForwardController {

    @RequestMapping(value = "/*", method = RequestMethod.GET)
    public String redirectRoot(HttpServletRequest request) {
        return "forward:/a/web/index.html";
    }

    @RequestMapping(value = "/a/**/{path:[^.]*}", method = RequestMethod.GET)
    public String redirectClients(HttpServletRequest request) {

        String requestURI = request.getRequestURI();

        if (requestURI.startsWith("/a/admin/")) {
            return "forward:/a/admin/index.html";
        }

        return "forward:/a/web/index.html";
    }

}
2020-05-30