Spring MVC UI 服务表单提交背后 Spring Cloud Zuul
Spring MVC UI service form submission behind Spring Cloud Zuul
问题是当表单 POST 发生时,然后控制器进行重定向,似乎重定向不知道它在 Zuul 后面。
表格:
@RequestMapping(value = "/create-something", method = RequestMethod.GET)
public String getForm(Model model, @CookieValue(value = "XSRF-TOKEN", defaultValue = "none", required=true) String token) {
model.addAttribute("title", "Create New Something");
model.addAttribute("_csrf", token);
return "views/create-something";
}
POST:
@RequestMapping(value = "/create-something", method = RequestMethod.POST)
public String postForm(Model model, @ModelAttribute Something something) {
SomethingClient.createSomething(something);
return "redirect:" + something.getName() + "/";
}
此设置将导致重定向尝试命中 UI 服务的内部 IP 而不是 public Zuul URL.
在尝试了不同的方法后,我最终选择了直接 URL。不确定是否有更好的解决方案,但这确实有效并解决了上述问题。
新 POST:
@RequestMapping(value = "/create-something", method = RequestMethod.POST)
public String postForm(Model model, @ModelAttribute Something something) {
SomethingClient.createSomething(something);
return "redirect:http://domain.com/ui/" + something.getName() + "/";
}
另一个想法是拦截器。这感觉就像增加了复杂性乘以大量 UI 服务。
问题是当表单 POST 发生时,然后控制器进行重定向,似乎重定向不知道它在 Zuul 后面。
表格:
@RequestMapping(value = "/create-something", method = RequestMethod.GET)
public String getForm(Model model, @CookieValue(value = "XSRF-TOKEN", defaultValue = "none", required=true) String token) {
model.addAttribute("title", "Create New Something");
model.addAttribute("_csrf", token);
return "views/create-something";
}
POST:
@RequestMapping(value = "/create-something", method = RequestMethod.POST)
public String postForm(Model model, @ModelAttribute Something something) {
SomethingClient.createSomething(something);
return "redirect:" + something.getName() + "/";
}
此设置将导致重定向尝试命中 UI 服务的内部 IP 而不是 public Zuul URL.
在尝试了不同的方法后,我最终选择了直接 URL。不确定是否有更好的解决方案,但这确实有效并解决了上述问题。
新 POST:
@RequestMapping(value = "/create-something", method = RequestMethod.POST)
public String postForm(Model model, @ModelAttribute Something something) {
SomethingClient.createSomething(something);
return "redirect:http://domain.com/ui/" + something.getName() + "/";
}
另一个想法是拦截器。这感觉就像增加了复杂性乘以大量 UI 服务。