1

セッションタイムアウトとJSF2について質問があります。例外ハンドラーは、誰もが好む方法で正確に機能していますが、ログインページに値を渡す必要があります。たとえば、私は一般的なログインURL(www.acme.com/?companyId=company14)を持っており、これにより、company14に独自のカスタムログインページ(ロゴを使用)が表示されます。アプリケーションに入って少し作業をした後、電子メールまたは2を読みます。セッションがタイムアウトし、セッションタイムアウトページが表示され、[OK]をクリックしてログインページに進むようにユーザーに指示します。URLに?companyId = company14を追加するにはどうすればよいですか?これを使用して、例外ハンドラーでハードコーディングできます。

requestMap.put( "companyId"、 "company14");

次に、viewExpired.xhtmlページでそれを参照します。

    <h:panelGrid id="expiredGrid" columns="1">
        <f:facet name="header">
            <h:outputText id="outExpireMsg" value="Your session has expired"/>
        </f:facet>
        <h:outputText id="outReqMessage" value="Reloading the page will require login."/>
        <h:outputText value=""/>
        <h:button id="okButton" type="submit" value="Ok" outcome="login?companyId=#{companyId}"/>
    </h:panelGrid>

問題は、セッションタイムアウトによって消去されない限り、companyIdをどこにも保存できないように見えることです。この値を使用して、exceptionhandlerでcompanyIdを設定したいと思います。何か案は?

4

1 に答える 1

0

ログイン時にCookieとして設定できます。

Map<String, Object> properties = new HashMap<String, Object>();
properties.put("path", "/"); 
externalContext.addResponseCookie("companyId", companyId, properties);

次に、次のように取得できます。

Cookie cookie = (Cookie) externalContext.getRequestCookieMap().get("companyId");

if (cookie != null) {
    String companyId = cookie.getValue();
}

サーバー側のセッションが期限切れになっても、これは期限切れにならないことに注意してください。これは、ブラウザが閉じられたときにのみ期限切れになります。

于 2012-06-19T21:14:29.957 に答える