Java EE/JSF2アプリケーションに適切なログアウトを実装しようとしています。
それには2つのことが必要です。
- JAASからログアウトして、セッションを無効にする必要があります
- 次に、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" ...でも試しました)。
どんな助けでもいただければ幸いです。