0

アプリケーションの「カスタム」(JSF)ログインページがあります。私の会社は認証にSiteminderを使用しています。したがって、「カスタム」ページでSiteminderにログインするには、適切なフォームフィールド(ユーザー名/パスワードといくつかのSiteminder固有の非表示フィールド)を使用して/login.fccに投稿するフォームが必要です。

私がやろうとしているのは、JSFのフォーム検証などを引き続き活用し、login.fccに投稿することです。

これが私のカスタムフォームの簡略版です。

<rich:messages />
    <h:form id="adminLogin" prependId="false">
    <h:panelGrid columns="2" styleClass="center">
       <h:outputLabel value="HUB USERNAME:" />
       <h:inputText id="USER" label="Username" size="12" required="true" />
       <h:outputLabel value="HUB PASSWORD:" />
       <h:inputSecret id="PASSWORD" label="Password" size="12" required="true" />
       <input type="hidden" name="target" value="#{loginController.smTarget}" />
       <input type="hidden" name="smagentname" value="#{loginController.smAgentName}" />
     </h:panelGrid>
   <h:panelGroup layout="block" styleClass="max-width button-panel">
     <a4j:commandButton id="adminLoginBtn" value="LOGIN"
       styleClass="login-btn" 
       action="#{loginController.managerLogin}" />
   </h:panelGroup>
</h:form>

targetフィールドとsmagentnameフィールドに標準の非表示入力を使用していることに注意してください。これは、これらのフィールドのコントローラーにセッターとゲッターの両方を含める必要がないためです。ページがレンダリングされるときにコントローラーが値を提供するようにしたいだけです。

私のコントローラーメソッドは次のようになります。

public void managerLogin()
{
    LoginController.LOG.debug("manager is logging in...");
    LoginController.LOG.debug("user: " + getRequestParameterValue("USER"));
    LoginController.LOG.debug("smagent: " + getRequestParameterValue("smagentname"));
    LoginController.LOG.debug("target: " + getRequestParameterValue("target"));

    forwardTo(LoginController.SM_LOGIN_FCC);
}

パスワードフィールドを除くすべてのフィールドから値をログに記録していることがわかります。これらはすべてログに正しく出力されます...したがって、値を取得していることがわかります。私の「forwardTo()」メソッドは、ExternalContextを取得し、dispatch()を呼び出します... login.fccページ(「/forms/login.fcc」)へのパスを渡します。

フォームに値を入力してログインボタンをクリックすると、コンソールに値が表示されますが、ブラウザに404メッセージが表示されます。

「/forms/login.fcc」ページをアドレス行に手動で配置でき、login.fccページをレンダリングするGETに問題はありません。しかし、もちろん、login.fcc(GET)をレンダリングしたくありません。Siteminderログインを(POST経由で)実行したいと思います。

すべてのリクエストパラメータは、これが機能することを期待していたフォワードプロセスを通じて利用可能になることを理解しています。

これと同じフォームを使用してJSF化を解除し、ログインボタンでフォームを送信するだけです(そのアクションはPOST経由で/forms/login.fccになり、正常に機能しますが、その後、 JSFが提供するフォーム/フィールド検証の利点。

何か案は?

4

1 に答える 1

0

次のプロセスを使用します。

  • SiteMinder リダイレクトに従う
  • 資格情報を送信します (ユーザー名/パスワード)
  • SiteMinder リダイレクトをもう一度たどる
  • SiteMinder Cookie を送信する

プロセスを詳しく説明している記事は次のとおりです。

于 2013-11-18T18:53:05.427 に答える