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 字段使用了标准隐藏输入。这是因为我不需要在控制器中为这些字段同时设置 setter 和 getter。我只是希望控制器在页面呈现时提供值。

我的控制器方法如下所示:

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 页面没有问题。但我当然不想呈现我想执行 Siteminder 登录(通过 POST)的 login.fcc (GET)。

我的理解是,所有请求参数都可以通过我期望这工作的转发过程获得。

我可以采用相同的表单并将其取消 JSF 化...并使登录按钮只需提交表单(其操作将是 /forms/login.fcc 通过 POST 并且它也可以正常工作,但随后我松开了JSF 提供的表单/字段验证的好处。

有任何想法吗?

4

1 回答 1

0

使用以下过程:

  • 遵循 SiteMinder 重定向
  • 发送您的凭据(用户名/密码)
  • 再次关注 SiteMinder 重定向
  • 发送 SiteMinder cookie

这是一篇详细解释该过程的文章:

于 2013-11-18T18:53:05.427 回答