2013-06-20 7 views
8

私は春に@SessionAttributesを使用していますが、セッションを終了する方法はわかりません。以下のコードを試しましたが、エラーが表示されます。春3のセッションを終了する方法

ありがとうございました。したがって、それはあなたが

を無効にすることはありません印象の原因 - あなたの現在のセッションを無効にした後@SessionAttributesを使用しているとき、私は一般的な問題を考える

@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

どのようなエラーが表示されますか?スタックトレースを投稿してください – Jk1

答えて

18

、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"; 
} 
あなたはたくさんの属性を持っている場合は

は、ofcourseのあなたは

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

ありがとう貴重な答え –

関連する問題