かなり単純な要件です。 Web J2EE 6アプリケーションにログインした後、ユーザーを再度ログアウトさせるにはどうすればよいですか?
私が見たほとんどの(すべて?)本とチュートリアルは、ログイン/ログインエラーページをアプリケーションに追加し、「j_security_check」メソッドを使用してセキュリティプリンシパル/ロール/レルムなどの使用方法を示す方法を示しています。しかし、ユーザーにログアウトする権限を与える方法は明確ではありません。実際、たとえばセッションがタイムアウトした後などにログアウトを強制するにはどうすればよいですか?
次の方法でセッションを無効にする_logout servlet/jsp
_が必要です。
session.invalidate() method
を使用してセッションも無効にしていました。HttpServletRequest.logout()
を提供します。これはセキュリティコンテキストのみを無効にし、セッションはまだ存在します。そして、アプリケーションUIは、その_logout servlet/jsp
_を呼び出すリンクを提供する必要があります
質問:確かに、たとえばセッションがタイムアウトした後などにログアウトを強制するにはどうすればよいですか?
Answer: web.xmlの_<session-timeout>
_を使用すると、サーバーによってセッションが無効になるまでのタイムアウト値を定義できます。
logout()
-Method of HttpServletRequest
を使用してプログラムで行うことができます。ユーザー名とパスワードでログインするための対応する方法もあります。これらのメソッドはServlet 3.0で追加されたため、Java EE 6で使用できます。
タイムアウトは別の獣であり、web.xml
次のように:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
時間の単位は分です。
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;
}