2014-10-18 60 views
0

我使用spring mvc为我的web应用程序,但重定向行为有点奇怪。春天 - 为什么'重定向'去localhost

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

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

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

但是,当它到达线,不知何故,试图将用户到本地主机重定向,即使它不在本地运行。

它是否与任何弹簧配置有关?我稍微使用了spring框架,但是我没有遇到这种问题。

谢谢。

回答

0

假设你正在使用一个很好的旧UrlBasedResourceViewResolver它创建RedirectView实例来处理重定向视图名,那么,没有,Spring不会做任何会导致重定向到本地主机。

RedirectView将简单地使用HttpServletResponse#sendRedirect(String)来发送重定向。该Javadoc中说

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

因此,随着

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

重定向视图名称,如

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

会导致春节发送302响应与

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

一个Location头一定有别的东西在你的安装(或你的用户的浏览器),是造成这一点。

+0

有趣的是,如果它通过负载平衡器,它会保持重定向到'本地主机'而不是域名。但是如果我直接点击http://domain-name.com:8080/app/demo.do这样的应用程序,那么后面的所有请求都可以正常工作。 – user826323 2014-10-20 22:50:31

+0

同样的事情发生在我身上,在AWS Load Balancer下,当我请求“some_url”时,该URL的控制器加入请求,最终重定向为“redirect:https://some_domain.net”。但重定向到像“https:// localhost/some_url”这样的浏览器。 “some_url”属于该控制器。 – webmaster 2016-07-21 15:33:03