20

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

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

4

3 に答える 3

27

logout servlet/jsp次の方法を使用してセッションを無効にする必要があります。

  • Servlet 3.0 より前では、session.invalidate() methodwhich を使用するとセッションも無効になります。
  • HttpServletRequest.logout()Servlet 3.0 は、セキュリティ コンテキストのみを無効にし、セッションがまだ存在するAPI メソッドを提供します。

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

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

回答: web.xmlの<session-timeout>では、サーバーによってセッションが無効化されるまでのタイムアウト値を定義できます。

于 2012-06-05T08:16:52.940 に答える
5

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

タイムアウトは別の獣でありweb.xml、次のように指定できます。

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

時間の単位は分です。

于 2012-06-05T08:19:05.780 に答える
1

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;
}    
于 2012-06-06T00:31:09.847 に答える