春天 - 为什么'重定向'去localhost

时间:2014-10-18 02:13:29

标签: spring spring-mvc

我正在使用spring mvc作为我的Web应用程序,但重定向行为有点奇怪。

我有一个代码将用户添加到数据库以进行注册并将用户重定向到另一个页面,但是当我将其部署到我的服务器时,重定向一直在寻找' localhost'而不是域名。

这是我的代码。这很简单。

public ModelAndView register(HttpServletRequest request, HttpServletResponse response) {
     // does a successful database process.
     return new ModelAndView("redirect:survey1.do?enabled=true&page=0");
}

但是当它到达那一行时,它会尝试将用户重定向到localhost,即使它没有在本地运行。

它与任何弹簧配置有关吗?我之前使用过spring框架,但我还没有遇到过这种问题。

感谢。

2 个答案:

答案 0 :(得分:0)

假设您正在使用一个好的旧UrlBasedResourceViewResolver来创建RedirectView个实例来处理重定向视图名称,那么,不,Spring不做任何会导致重定向的事情转到localhost。

RedirectView只会使用HttpServletResponse#sendRedirect(String)发送重定向。那个javadoc说

  

如果位置是相对的,没有前导'/'容器   将其解释为相对于当前请求URI

所以,URI为

http://your-uri-host.com/web-app-context/whatever

重定向视图名称,如

redirect:survey1.do?enabled=true&page=0

将导致Spring发送带有Location标头

的302响应
Location: http://you-uri-host.com/web-app-context/survey1.do?enabled=true&page=0

您的设置(或用户的浏览器)中必定还有其他内容导致此问题。

答案 1 :(得分:0)

当spring-boot在代理后面时,我也面临着同样的问题。以我为例的Nginx。您应该将Nnginx的http-header主机传递给spring-boot。因此spring-boot可以找出原始URL是什么

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect off;
    proxy_connect_timeout 240;
    proxy_send_timeout 240;
    proxy_read_timeout 240;
    proxy_pass http://localhost:9912;
}

以上是我的nginx配置,如我所见,我正在传递Host标头。否则spring-boot会以为我在localhost:9912上运行

我可以说Cloudflare正确传递了此标头,不确定AWS负载平衡。