Мне нужно обработать некоторые запросы 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
через браузер, нажать « refresh » и все будет работать. Но это не для /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
.