Tôi đang phát triển một ứng dụng dựa trên đăng nhập trong JSF với các nguyên tố. Trong đó tôi giữ thông tin người dùng đã đăng nhập trong phiên quản lý phạm vi quản lý và tôi cần phải xóa các chi tiết đó khi đăng xuất, Vậy làm thế nào để xóa các chi tiết trong đối tượng ManagedSean SessionScoped?Làm thế nào để xóa một đối tượng của phiên quản lý phạm vi đậu?
Trả lời
Bạn cần phải vô hiệu hóa phiên hiện tại bằng cách gọi hàm sau trong phương pháp hành động của bạn:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
Ngoài ra, như phiên scoped đậu được vào thùng rác chôn các yêu cầu tiếp theo, hãy chắc chắn để gửi một chuyển hướng:
FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml");
Hoặc, chỉ cần trả về một kết quả trường hợp chuyển hướng từ phương pháp của bạn:
return "login.xhtml?faces-redirect=true";
Trong trường hợp bạn không muốn làm mất hiệu lực phiên và, một cách hiệu quả, duy trì phiên của bạn scoped đậu (đó là một thực tế xấu theo ý kiến của tôi), chỉ cần vô hiệu hóa tất cả các dữ liệu người dùng (được hy vọng thu được trong một phiên quản lý phạm vi đậu) trong phương pháp đăng xuất (bạn có thể cần phải tiêm đậu đó trong trường hợp phương thức đăng xuất nằm trong một phiên phạm vi đậu).
Khi logout người dùng, phiên bị phá hủy và tất cả các đối tượng SessionScoped ManagedBean quá
Bạn không cần phải xóa phiên scoped quản lý đậu bằng tay. Chỉ cần xóa phiên người dùng. Bằng cách sử dụng mã sau trong servlet để đăng xuất.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
System_Properties system_Properties=new System_Properties();
PrintWriter out = response.getWriter();
try {
request.getSession().invalidate();
}finally {
out.close();
}
}
Nếu bạn vẫn xóa thủ công dữ liệu bean được quản lý thì có thể thực hiện bằng cách sử dụng mã sau.
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managed_bean_name", null);
Trong trường hợp "mananged_bean_name" là tên của bean được quản lý của bạn.
Hy vọng nó giúp
- 1. phiên quản lý phạm vi đậu vs đậu trạng thái vs httpsession
- 2. Làm thế nào để chấm dứt một sợi trong một phạm vi xem phạm vi đậu?
- 3. Phạm vi quản lý và tuổi thọ đối tượng Trong phạm vi STL Vectors
- 4. Làm thế nào để quản lý một đối tượng gộp trong Spring?
- 5. Làm thế nào để ghi đè lên một phạm vi đậu cho các xét nghiệm?
- 6. Ví dụ Xtext của một đối tượng có phạm vi
- 7. Hiểu đậu/đậu được quản lý
- 8. Phạm vi của Trình quản lý tải là gì?
- 9. Làm cách nào để quản lý việc xử lý đối tượng khi tôi sử dụng IoC?
- 10. Làm mới/Tải lại Phạm vi quản lý phạm vi ứng dụng
- 11. Làm thế nào để quản lý tuổi thọ đối tượng khi làm việc với COM interop?
- 12. đậu được quản lý theo phiên so với stateful ejb
- 13. Phạm vi yêu cầu mùa xuân đậu
- 14. Làm thế nào để tạo và hủy diệt Đậu Quản lý CDI (Weld) thông qua BeanManager?
- 15. Làm cách nào để đặt tên thuộc tính của bean có phạm vi phiên Spring?
- 16. Làm cách nào để thêm một đối tượng JSON vào một biến có phạm vi trong Java?
- 17. Làm thế nào để phạm vi cuối tuần bởi đối tượng Date
- 18. Làm thế nào để đối phó với quản lý inept
- 19. Làm cách nào để đánh dấu văn bản của đối tượng Phạm vi DOM?
- 20. Ứng dụng so với Quản lý đối tượng Container được quản lý
- 21. Làm cách nào để xóa một phạm vi (tiểu mục) của danh sách bằng Python?
- 22. Phạm vi của phiên HTTP là gì?
- 23. Làm thế nào để cascade đúng cách xóa các đối tượng được quản lý trong Core Data?
- 24. JSF Quản lý và điều chỉnh phiên
- 25. Cách viết phạm vi với đối tượng thuộc đối tượng?
- 26. Làm cách nào để quản lý các đối tượng IDisposable được lưu trong bộ nhớ cache?
- 27. những gì để sử dụng, quản lý đậu (đậu sao) hoặc đậu thực thể?
- 28. Bắt 'vi phạm ràng buộc toàn vẹn tham chiếu' khi xóa đối tượng miền
- 29. Đậu được quản lý JSF trong một Servlet
- 30. Làm thế nào để xóa một phiên PHP?
"đăng xuất" không theo định nghĩa "phiên bị hủy". Tuy nhiên, cách khác vòng thường thực sự là. – BalusC
Tôi không đồng ý. Đăng xuất có nghĩa là "vô hiệu phiên" thường lệ. Đó là thực hành tốt nhất và nó là mô hình phổ biến. Không phá hủy phiên tạo ra vấn đề an ninh –
Uh, chắc chắn rồi. Nếu đúng như vậy, OP sẽ không hỏi câu hỏi này ngay từ đầu :) – BalusC