,我有以下問題,基於註解的Spring MVC:不能存儲在會話參數(Spring MVC的)
我有兩個控制器(LoginController中,AdminController),我可以傳遞一個對象(類型BonjourUser的與loggedInUser)通過將會話保持在AdminController中來形成LoginController。到現在爲止還挺好。
爲了防止盜鏈,在初始「GET」時,AdminController驗證它在調用時收到有效的管理員用戶。 這是第一次正常工作,因爲loginController會將該對象添加到會話中。
現在問題來了: 一旦管理員登錄並嘗試重新訪問管理頁面(例如,通過JSP中的鏈接),用戶對象似乎已從會話中消失,因爲我得到「loggedInUser」屬性的HttpSessionRequiredException。 AFAIK除非我在會話中調用setComplete(),否則不應該從會話中刪除該對象。 (我沒有調用這個方法!)那麼爲什麼從會話中刪除屬性呢?我讀here,你不能在控制器之間傳遞會話屬性。但據說here這是可能的。我也認爲它應該可以工作,因爲我已經在控制器之間傳遞了一個參數,當我從LoginController重定向到AdminController時。
所以這裏是代碼:
的LoginController:
@Controller
@SessionAttributes("loggedInUser")
public class LoginController extends BonjourController
{
[...]
@RequestMapping(value = {"/home"}, method = RequestMethod.POST)
public String validate(@ModelAttribute(value = "command") BonjourUser user, ModelMap map, HttpSession session)
{
[...]
map.addAttribute("loggedInUser", loggedInUser);
[...]
return "redirect:/admin";
}
}
而且AdminController:
@Controller
@RequestMapping(value = "/admin")
@SessionAttributes("loggedInUser")
public class AdminController extends BonjourController
{
@RequestMapping(method = RequestMethod.GET)
public String loginAdmin(@ModelAttribute("loggedInUser") BonjourUser loggedInUser, ModelMap map, HttpSession session)
{
//check if access is authorized
if(loggedInUser == null)
{
return "redirect:/login";
}
[...]
}
}
我在使用環節的管理員JSP(這會導致除外)看起來像這樣
<a href="admin">Once more to admin section</a>
Basicaly我得到相同的異常時,我只是在我的瀏覽器地址欄輸入:
http://localhost:8080/Bonjour/admin
唯一的例外是這樣的:
org.springframework.web.HttpSessionRequiredException: Expected session attribute 'loggedInUser'
所以我需要做什麼改變,以保證用戶對象(loggedInUser)不會從會話中刪除?
由於提前,
Maex