4

Java EE/JSF2アプリケーションに適切なログアウトを実装しようとしています。

それには2つのことが必要です。

  1. JAASからログアウトして、セッションを無効にする必要があります
  2. 次に、Siteminderログアウトを起動するために外部URLに移動する必要があります

SiteminderログアウトURL(ポリシーサーバーで構成->変更できません)がアプリケーションコンテキスト外にあります。例えば。WebアプリケーションのURLがhttps:// localhost:8080 / sm / MyWebAppの場合、ログアウトURLはhttps:// localhost:8080 / anotherwebapp/logout.htmlです。

これは現在のローカルログアウトコードです:

public void logout() {
    System.out.println("Logging out...");
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    try {
        request.logout();
    } catch (ServletException e) {
        e.printStackTrace();
    }
    HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    if (session != null) {
        session.invalidate();
    }
}

そして、ログアウトURLを生成するプロパティは次のとおりです。

public String getLogoutUrl() {
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String requestServer = request.getServerName();
    String requestScheme = request.getScheme();
    int serverPort = request.getServerPort();
    String logoutUrl = requestScheme + "://" + requestServer + ":" + Integer.toString(serverPort) + "/anotherwebapp/logout.html";
    return logoutUrl;
}

ただし、logout()を呼び出して外部URLを開くことができるJSF2/Primefacesコンポーネントが見つかりません。たとえば、私が持っている場合:

<h:outputLink value="#{authBean.logoutUrl}" onclick="#{authBean.logout()}">[Logout]</h:outputLink>

その後、onclickが呼び出されていないようです。

私が試したもう1つの方法は、外部URLをログアウト関数の最後に配置してナビゲーション文字列として返すことでしたが、認識されません( "?faces-redirect = true" ...でも試しました)。

どんな助けでもいただければ幸いです。

4

2 に答える 2

13

をそのまま使用することもできますExternalContext#redirect()

public void logout() throws ServletException, IOException {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ((HttpServletRequest) ec.getRequest()).logout();
    ec.invalidateSession();
    ec.redirect("http://example.com/anothercontext/logout");
}

メタ リフレッシュを伴う中間ページは必要ありません。

于 2010-07-22T17:42:39.030 に答える
3

ページ logout.xhtml を作成できるため、コードは次のようになります。

public String getLogoutUrl() {
    return "/logout.jsf";
}

ページに次を追加します。

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=https://localhost:8080/anotherwebapp/logout.html">
于 2010-07-21T10:02:37.653 に答える