Можно ли перенаправить на Siteminder login.fcc из действия JSF?

У меня есть "пользовательская" (JSF) страница входа для моего приложения. Моя компания использует Siteminder для аутентификации. Таким образом, чтобы войти в Siteminder с «пользовательской» страницы, у меня должна быть форма, которая отправляет сообщения в /login.fcc с соответствующими полями формы (имя пользователя/пароль и пара скрытых полей, специфичных для Siteminder).

Что я пытаюсь сделать, так это продолжать использовать проверки форм и тому подобное в 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» в адресную строку, и у меня не возникает проблем с GET-рендерингом страницы login.fcc. Но я, конечно, не хочу отображать login.fcc (GET), я хочу выполнять вход в систему Siteminder (через POST).

Насколько я понимаю, все параметры запроса становятся доступными через процесс переадресации. Я ожидал, что это сработает.

Я могу взять эту же форму и отменить JSF-ize... и заставить кнопку входа просто отправить форму (чьим действием будет /forms/login.fcc через POST, и это тоже работает нормально, но тогда я теряю преимущества проверки формы/поля, которые предоставляет JSF.

Любые идеи?


person Steve    schedule 01.10.2012    source источник
comment
Итак, вы хотите перейти к http://<some_ip>:8080/<your_webapp>/forms/login.fcc из управляемого компонента. Вы впервые проверили URL-адрес в браузере? Если это работает, как вы конкретно пытаетесь получить доступ к этому URL-адресу (я имею в виду код метода forwardTo)?   -  person Luiggi Mendoza    schedule 01.10.2012
comment
@Luiggi - это заставило меня задуматься ... Теперь я могу понять. Таким образом, Apache сидит перед нашим сервером JBoss и увидит /forms/login.fcc и отправит этот запрос агенту Siteminder для обработки. Таким образом, технически он не размещен в веб-приложении, поскольку он находится за пределами JBoss. Итак, как я уже сказал, я подозреваю, что форвард не сработает.   -  person Steve    schedule 01.10.2012


Ответы (1)


Используйте следующий процесс:

  • Следуйте перенаправлению SiteMinder
  • Отправьте свои учетные данные (имя пользователя/пароль)
  • Снова выполните перенаправление SiteMinder.
  • Отправить файлы cookie SiteMinder

Вот статья, в которой подробно описан процесс:

person Paul Sweatte    schedule 18.11.2013