web-dev-qa-db-ja.com

ログイン後に適切にJava EE 6 Webアプリケーションからログアウトする方法

かなり単純な要件です。 Web J2EE 6アプリケーションにログインした後、ユーザーを再度ログアウトさせるにはどうすればよいですか?

私が見たほとんどの(すべて?)本とチュートリアルは、ログイン/ログインエラーページをアプリケーションに追加し、「j_security_check」メソッドを使用してセキュリティプリンシパル/ロール/レルムなどの使用方法を示す方法を示しています。しかし、ユーザーにログアウトする権限を与える方法は明確ではありません。実際、たとえばセッションがタイムアウトした後などにログアウトを強制するにはどうすればよいですか?

20
smagrath

次の方法でセッションを無効にする_logout servlet/jsp_が必要です。

  • サーブレット3.0より前では、session.invalidate() methodを使用してセッションも無効にしていました。
  • サーブレット3.0はAPIメソッドHttpServletRequest.logout()を提供します。これはセキュリティコンテキストのみを無効にし、セッションはまだ存在します。

そして、アプリケーションUIは、その_logout servlet/jsp_を呼び出すリンクを提供する必要があります

質問:確かに、たとえばセッションがタイムアウトした後などにログアウトを強制するにはどうすればよいですか?

Answer: web.xmlの_<session-timeout>_を使用すると、サーバーによってセッションが無効になるまでのタイムアウト値を定義できます。

27
Ramesh PVK

logout() -Method of HttpServletRequest を使用してプログラムで行うことができます。ユーザー名とパスワードでログインするための対応する方法もあります。これらのメソッドはServlet 3.0で追加されたため、Java EE 6で使用できます。

タイムアウトは別の獣であり、web.xml 次のように:

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

時間の単位は分です。

5
ftr

2ステッププロセス-

1.ログアウトページを作成する
2。ログアウトメソッドを使用してセッションBeanを作成する

ステップA:ログアウトページ

<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:セッションBeanバッキングコード(スニペット)

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;
}    
1
smagrath