User uuser = (User) request.getSession().getAttribute("user"); // ❌ 可能為 null
`@SessionAttributes("user")` 將模型屬性 **"user"** 存入 Session,**但只有在方法返回 ModelAndView 且模型包含 "user" 時才會寫入**。原碼中 `model.addAttribute("user", user1)` 正確,但隨後立即從 `request.getSession()` 讀取,**同一請求內 Session 尚未完成寫入**,導致取不到。
@RequestMapping("/login")
public String login(@RequestParam String uname, @RequestParam String upass,
Model model, HttpSession session) {
User user = userService.selectLogin(uname, upass);
if (user != null) {
model.addAttribute("user", user); // 觸發 @SessionAttributes 寫入
// 當前請求直接用 user 變數,無需從 session 讀
return "redirect:/home";
}
return "login";
}
@RequestMapping("/profile")
public String profile(@ModelAttribute("user") User user) { // 自動從 Session 取出
return "profile";
}
@RequestMapping("/logout")
public String logout(SessionStatus status) {
status.setComplete(); // 移除 @SessionAttributes 宣告的所有屬性
return "redirect:/login";
}