Problema de URL de redirecionamento de primavera quando atrás do proxy Zuul
Eu tenho tentado chegar ao fundo de um problema de redirecionamento estranho nos últimos 2 dias sem sucesso.
Com base nos projetos de exemplo de primavera em nuvem, configurei o Eureka, o Zuul e um serviço básico que é executado atrás do Zuul.
Eu tenho o seguinte método;
@RequestMapping(method = RequestMethod.POST, value = "/register")
public String registerDevice(Principal principal, String response) {
// ...
return "redirect:/account";
}
O formulário está configurado para postar no URL proxy como a seguir;
POST https://localhost:8443/service/register
(O Zuul está sendo executado no host local: 8443).
A URL para o serviço local (sem proxy) seria;http: // localhost: 9001 / register
A chamada POST é submetida a proxy corretamente através do método acima, no entanto, o local de redirecionamento enviado ao navegador é a URL não proxy do serviço;http: // localhost: 9001 / conta
O proxy Zuul está definitivamente enviando o corretox encaminhado- * cabeçalhos, então eu esperaria que o resolvedor de exibição no Spring construa o redirecionamento correto com base nos valores x-forwarded.
Para provar que os cabeçalhos foram enviados corretamente, reconfigurei o método da seguinte maneira;
@RequestMapping(method = RequestMethod.POST, value = "/register")
public void registerDevice(Principal, String response, HttpServletResponse response) {
// ...
String rUrl = ServletUriComponentsBuilder.fromCurrentContextPath().path("/account").build().toUriString();
servletResponse.sendRedirect(rUrl);
}
Que redireciona corretamente o navegador para o local em proxy;https: // localhost: 8443 / service / account
Isso é um bug ou é um comportamento esperado? Eu pensei que usando "redirecionar:" foi feito para honrar os cabeçalhos de encaminhamento passados de um proxy.