2012-06-05 8 views
20

Một yêu cầu khá đơn giản. Sau khi đăng nhập vào ứng dụng web J2EE 6, làm thế nào tôi có thể đăng xuất lại người dùng?Cách đăng xuất đúng cách ứng dụng web Java EE 6 sau khi đăng nhập

Hầu hết (tất cả?) Sách và hướng dẫn tôi đã thấy cách thêm trang đăng nhập/loginerror vào ứng dụng của chúng và chứng minh việc sử dụng các nguyên tắc/vai trò bảo mật, vv bằng phương thức "j_security_check". Nhưng sau đó nó không rõ ràng làm thế nào để cung cấp cho người dùng sức mạnh để đăng xuất. Thật vậy, làm thế nào tôi có thể buộc đăng xuất sau khi, nói, phiên thời gian ra, vv?

Trả lời

22

Bạn nên có logout servlet/jsp mà làm mất hiệu lực phiên sử dụng các cách sau:

  • Trước Servlet 3.0, sử dụng session.invalidate() method mà làm mất hiệu lực phiên cũng có.
  • Servlet 3.0 cung cấp phương thức API HttpServletRequest.logout() chỉ làm mất hiệu lực ngữ cảnh bảo mật và phiên vẫn tồn tại.

Và, giao diện người dùng ứng dụng phải được cung cấp một liên kết mà gọi rằng logout servlet/jsp

Câu hỏi: Thật vậy, làm thế nào tôi có thể buộc một logout sau, nói, thời buổi hiện, vv?

Trả lời:<session-timeout> trong web.xml cho phép bạn xác định giá trị thời gian chờ mà sau đó phiên sẽ bị máy chủ vô hiệu.

+4

+1 cho phương thức 'đăng xuất()'. – adarshr

+0

Cảm ơn Ramesh - điều đó cho phép tôi kết hợp nó một cách đúng đắn. Một điều tôi chọn ở nơi khác là tầm quan trọng của 'return '/ index? Faces-redirect = true"; '- điều này là cần thiết để phá vỡ phiên hiện tại và bất kỳ bộ nhớ đệm phía máy khách nào có thể đang diễn ra. – smagrath

+3

Để rõ ràng Servlet 3.0, bạn phải thực hiện cả logout() và session.invalidate()? – ammianus

5

Bạn có thể thực hiện theo cách lập trình bằng cách sử dụng logout() -Phương thức HttpServletRequest. Ngoài ra còn có một phương thức tương ứng để đăng nhập bằng tên người dùng và mật khẩu. Những phương pháp này đã được thêm vào trong Servlet 3.0, để chúng có sẵn trong Java EE 6.

Đã hết thời gian là một con thú khác nhau và có thể được quy định tại web.xml như sau:

<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 

Các đơn vị thời gian là phút .

+0

Tính năng này chỉ có sẵn từ Servlet 3.0 –

+1

Có, nhưng câu hỏi cụ thể đề cập đến JEE 6, vì vậy Servlet 3.0 là tốt – ftr

+0

Có. Trả lời siêu. –

1

Hai quá trình bước -

1.create trang logout
2.create một session bean với một phương pháp logout

BƯỚC A: Thoát Trang

<div class="mytext"> 
    <p>Hello #{userSession.username}, </p> 
    <p><h:outputText value="It doesn't seem you're logged in anyway..." rendered="#{!userSession.userLoggedIn}" /></p> 
</div> 
    <h:form class="mytext" rendered="#{userSession.userLoggedIn}" > 
     <h:panelGrid columns="2" > 
      <h:outputLabel value="Do you want to logout?" for="logout" /> 
      <p:commandButton value="Logout" id="logout" action="#{userSession.logout}" />          
     </h:panelGrid> 
    </h:form> 

BƯỚC B: Mã Bù Đậu Phiên (đoạn mã)

public String logout() { 
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true); 
    session.invalidate(); 
    return "/index?faces-redirect=true"; 
} 

public boolean isUserLoggedIn() { 
    String user = this.getUsername(); 
    boolean result = !((user == null)|| user.isEmpty()); 
    return result; 
} 

/** Get the login username if it exists */ 
public String getUsername() { 
    String user = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); 
    return user; 
}