2014-10-18 59 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