我在嘗試使RedirectAttributes的flashAttributes正常工作時遇到問題。 我已經使用Apache mod_proxy和ajp設置了一個使用Tomcat 7.0上的Spring MVC和反向代理構建的網站。Spring的flashAttributes不支持反向代理
我面臨的問題也在this question中描述,但在那裏提供的答案根本不適用於我的情況(我正在使用一個單一的Tomcat實例)。
這是從控制器片段我使用的用於測試目的:
@RequestMapping(value = "/land", method = RequestMethod.GET)
public String land(RedirectAttributes redirectAttrs, Model model) {
return "redirect_landing";
}
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public String redirect(RedirectAttributes redirectAttrs, HttpSession session) {
// add a session message
session.setAttribute("sessionMessage", "a session message");
// add a flash message
redirectAttrs.addFlashAttribute("flashMessage", "a flash message");
// define the base url
String baseUrl = "http://localhost:8080/MyApp/";
// String baseUrl = "http://dev.myapp.lan/";
return "redirect:" + baseUrl + "land";
}
而且模板是如此簡單:
Flash message: ${flashMessage}
Session message: ${sessionMessage}
相同的代碼給出了不同的結果,這取決於無論我是直接通過Tomcat還是通過Apache反向代理訪問網站:
Tomcat的回覆:
閃光消息:閃光消息
會話消息:會話消息
的Apache的mod_proxy背後:
閃光燈消息:
會話消息:會話消息
訪問的時候爲什麼沒有提示信息通過代理網站?
我檢出了RedirectAttributesModelMap.java和ModelMap.java的代碼,但是那裏沒有足夠的信息(顯然邏輯是在別處實現的)。
注:我隨時可以回落到會話屬性來實現我的目標,但這個問題對於那些誰使用Tomcat後面反向代理
代理服務器配置(片段)感覺足夠有趣:
<VirtualHost *:80>
ServerName dev.myapp.lan
ProxyPass/ajp://localhost:8009/MyApp/
ProxyPassReverseCookiePath /MyApp/
ProxyPassReverseCookieDomain localhost MyApp
ErrorLog /var/log/apache2/phonebook-error.log
LogLevel warn
CustomLog /var/log/apache2/phonebook-access.log combined
</VirtualHost>
TIA。
您是如何設定的反向代理。至少我們需要查看ProxyPass指令以及理想的所有代理配置。 –
@MarkThomas我使用我正在使用的apache配置中的一段代碼更新了我的問題。請讓我知道這是否足夠。非常感謝。 – dimi