2013-06-20 141 views
8

我在春季使用@SessionAttributes,但我不知道如何結束會話,我嘗試了下面的代碼,但是出現錯誤,請給我舉一些例子。如何在春季結束會話3

謝謝。因此造成的印象是永遠不會失效

你 -

@RequestMapping(value ="/LogoutAction") 
public String logout(HttpServletRequest request)  
{  
System.out.println("inside controller");  
    Resource res = new ClassPathResource("spring-context.xml"); 
    BeanFactory factory = new XmlBeanFactory(res); 
    HttpSession session = request.getSession(); 
    session.invalidate(); 
return "Login"; 
} 
+0

你得到了什麼樣的錯誤?請發佈stacktrace – Jk1

回答

18

我在使用@SessionAttributes是你無效當前會話後,Spring MVC的附加模型屬性回新的會話認爲常見問題可以在&無效之前檢查JSESSIONID的值。您將獲得一個全新的JSESSIONID,但以前的模型屬性附加直入新的會話

我發現自己不得不這樣做無效後擦去會話名稱「反」的一個模型屬性它

@RequestMapping(value="/invalidate", method=RequestMethod.POST) 
public String invalidate(HttpSession session, Model model) { 
    session.invalidate(); 
    if(model.containsAttribute("counter")) model.asMap().remove("counter"); 
    return "redirect:/counter"; 
} 

如果你有充足的屬性着,當然你可以嘗試擦拭過的一切使用

model.asMap().clear(); 

但在我看來,更好的辦法是使用不具有在其上@SessionAttribute不同的控制器無效。因此,無論其他控制器擁有的任何模型屬性都不會直接附加到新會話中。例如:

@Controller 
@RequestMapping("/logout") 
public class LogoutController { 

    @RequestMapping(method=RequestMethod.POST) 
    public String logout(HttpSession session) { 
    session.invalidate(); 
    return "redirect:/login"; 
    } 
} 
+0

謝謝gerrytan。 – kavi

+0

感謝寶貴的答案 –