アプリケーションの「カスタム」(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が提供するフォーム/フィールド検証の利点。
何か案は?