RedirectAttributes 是Spring mvc 3.1版本以後出來的一個功能,專門用於重定向以後還能帶參數跳轉的的工具類,有兩種使用方式瀏覽器
一、edirectAttributes.addAttributie("prama1",value1);安全
return:"redirect:/path/list"服務器
這種方式至關於在url中增長參數,瀏覽器中能夠看到參數內容cookie
二、redirectAttributes.addFlashAttributie("prama1",value1);session
return:"redirect:/path/list"mvc
這種方式在url中不暴露參數內容,而在重定向的頁面內能夠獲取到參數內容,其本質是經過session來實現。在跳轉到的view上可使用el表達式等進行獲取,在controller裏能夠用@ModelAttribute獲取。
對於第二種方式,在單服務器部署時是沒有問題的,但在分佈式部署時問題就出現了。前面說到
addFlashAttributie實際是使用session來實現的值傳遞,若是使用分佈式部署,而且沒有作session同步的狀況下,極可能redirect的請求會打到不一樣的服務器上,這時參數值就丟失了。分佈式
如何解決問題?
首先,使用方式1去傳值,這樣參數在url裏,目標地址能夠在request中獲取參數作任意操做。但也要注意一點,這種方式存在兩個問題 1)參數暴露在url裏,安全性不好;2)因爲參數在url裏,用戶再次刷新時也一樣會包含這些參數,這裏若是但願的效果是隻第一次redirect時使用這些參數(如顯示上一操做的結果信息)就出現了不想看到的現象。
其次,使用cookie去傳值,在redirect以前獎參數寫入cookie,再在rediect後讀取cookie值,使用後將cookie刪除。這種方式沒有上面的兩個問題,固然,這種方式也就和RedirectAttributes沒有關係了。工具