0

/ibm_security_logoutJSFプロジェクトにロジックを実装しようとしています。ログアウトに使用する方法についていくつかの要件があります。

次の形式に準拠する必要があります。

<FORM METHOD=POST ACTION="<%=request.getContextPath()%>/ibm_security_logout"
NAME="LogoutForm">
<INPUT TYPE="HIDDEN" NAME="logoutExitPage"
VALUE="/../weblogin/logout?dest=/myapp/goodbye.jsp">
<INPUT TYPE="submit" NAME="logout" VALUE="Logout">
</FORM>

両方のケースが存在する必要があります。

<%=request.getContextPath()%>/ibm_security_logout"
VALUE="/../weblogin/logout?dest=/myapp/goodbye.jsp">

どうすればcommanlinkでそれを実現できますか?

<h:commandLink value="Log Out" action="#{sessionController.logout}" />

Beanメソッドではどのように見えるべきですか?

public void logout() throws IOException {

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.invalidateSession();
    ec.redirect("/../weblogin/logout?dest=/myapp/goodbye.jsp");

}

編集

#{request.contextPath} = localhost:9080 /MyProject
ログインページ=localhost:9080 / weblogin / login?webapp = / MyProject(ログインページは経由で管理されます)externFramework
ログアウトもexternフレームワークを介して管理されます。したがって、URLはこのVALUE = "/../ weblogin / logout?dest = / weblogin / login?webapp =/MyProjectに準拠している必要があります。

以下のコードで試してみました。しかし、それは機能しませんでした。

<form id="logout" action="#{request.contextPath}/ibm_security_logout"
            method="post">
<input type="hidden" name="logoutExitPage"
            value="/../weblogin/logout?dest=/weblogin/login?webapp=/MyProject">
<a  href="#" onclick="document.getElementById('logout').submit()">Logout_NEU</a>
</form>
4

1 に答える 1

2

単独で使用するExternalContext#invalidateSession()だけでは不十分です。/ibm_security_logoutIBMのログイン機能を使用したことがある場合は、絶対に直接POSTする必要があります。セッションを無効にするだけでなく、SSOCookieとLPTA認証もクリアします。そうしないと、ユーザーは無効化した後も自動ログインされる可能性があります。

JSFではプレーンHTMLを使用できます。XHTMLでは大文字/キャメルケースのHTMLタグ/属性が無効であるため、これらの90年代スタイルの大文字のタグ/属性のみを無効にします(Faceletsを使用していると想定しています。質問履歴では、少なくともFaceletsを使用していることが確認されています)。

<form action="#{request.contextPath}/ibm_security_logout" method="post">
    <input type="hidden" name="logoutExitPage" value="#{request.contextPath}/home.xhtml">
    <input type="submit" name="logout" value="Logout" />
</form>

または、フォームを送信するためのリンクが本当に必要な場合は、

<form id="logout" action="#{request.contextPath}/ibm_security_logout" method="post">
    <input type="hidden" name="logoutExitPage" value="#{request.contextPath}/home.xhtml">
    <a href="#" onclick="document.getElementById('logout').submit()">Logout</a>
</form>

logoutExitPageログアウト後のランディングページのURLを表す必要があることに注意してください。必ずしも正確に表す必要はありません/../weblogin/logout?dest=/myapp/goodbye.jsp。それはほんの一例です。

于 2012-10-31T13:47:50.160 に答える