2013-06-20 30 views
8

Tôi đang sử dụng @SessionAttributes vào mùa xuân, nhưng tôi không biết làm thế nào để kết thúc phiên, tôi đã thử mã dưới đây nhưng tôi nhận được lỗi, Xin vui lòng cho tôi một số ví dụ.Làm thế nào để kết thúc phiên trong mùa xuân 3

Cảm ơn.

@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

Bạn gặp phải loại lỗi nào? Vui lòng đăng một stacktrace – Jk1

Trả lời

18

Tôi nghĩ rằng vấn đề thường gặp khi sử dụng @SessionAttributes là sau khi bạn không kích hoạt phiên hiện tại của bạn, Spring MVC đính kèm mô hình thuộc tính trở lại vào phiên mới - do đó gây ấn tượng nó không bao giờ làm mất hiệu lực

Bạn có thể kiểm tra giá trị của JSESSIONID trước & sau khi bạn vô hiệu hóa giá trị đó. Bạn sẽ nhận được một thương hiệu JSESSIONID mới, nhưng thuộc tính mô hình trước đó được gắn thẳng vào phiên làm việc mới

tôi thấy mình cần phải làm điều này để lau một thuộc tính mô hình tên "phản động" từ phiên sau khi hủy bỏ hiệu lực nó

@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"; 
} 

Nếu bạn có thuộc tính rất nhiều, dĩ nhiên bạn có thể thử tất cả mọi thứ lau tức sử dụng

model.asMap().clear(); 

Nhưng theo ý kiến ​​của tôi tiếp cận tốt hơn là để làm mất hiệu lực sử dụng một bộ điều khiển khác nhau mà không có @SessionAttribute trên đó. Do đó bất kỳ mô hình nào thuộc tính các bộ điều khiển khác sẽ không được gắn trực tiếp vào phiên mới. Ví dụ:

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

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

cảm ơn bạn gerrytan. – kavi

+0

Cảm ơn câu trả lời có giá trị –

Các vấn đề liên quan