2017-05-09 63 views
0

我一直在使用如何實施註銷

@SessionAttribute annotation. 
@RequestMapping(value = "/login_action") 
public ModelAndView login_action(@RequestParam("email") String email,@RequestParam("password") String password){ 
       Query q=session.createSQLQuery("SELECT User_ID,User_First_Name,User_Last_Name,Email,User_Type,Program,Level,Gender FROM Users WHERE Email=:email AND Password=:password"); 
q.setParameter("email",email); 
q.setParameter("password",password); 
Object u = (Object) q.uniqueResult(); 
model=new ModelAndView("profile"); 
model.addObject("user",u); 
return model; 
} 

現在我需要否定這一會議,同時註銷設置會話屬性無效Spring MVC中的會話。 我試着像

@RequestMapping(value = "/logout") 
    public ModelAndView logout(HttpSession sess){ 
     sess.invalidate(); 
     model.addObject("view","home"); 
     return model; 
    } 

我可以有一些答案與一些例子。

感謝您的幫助

+0

什麼是你的註銷碼結果? –

+0

它不工作,會話變量「user」仍存儲 –

回答

1

javadocs

注:會話屬性爲使用這個註解來表示對應 到指定的處理器的模型屬性,越來越透明地儲存 在對話會議。一旦 處理程序指示完成其會話會話,那些屬性將被刪除。因此, 使用此功能的這種對話屬性 應該在 特定處理程序的對話過程中臨時存儲在會話中。

對於永久會話屬性,例如,用戶認證對象 改爲使用傳統的session.setAttribute方法。 或者,考慮使用通用WebRequest接口的屬性管理功能 。

使用時通常SessionAttributes使用SessionStatus setComplete

我想你可能使用彈簧安全與認證供應商,像UsernamePasswordAuthenticationToken東西會更好。您的用戶/委託人可通過SecurityContextHolder訪問,幷包含在HttpSession中。使用spring安全性時,您可以使用/配置LogoutConfigurer來使會話無效,並清除SecurityContextHolder上下文並將身份驗證設置爲null。

附註:我希望這不是比一個demo/POC以外的任何,因爲它似乎是你存儲的密碼以純文本