JSF link 到外部站点而不在 URL 中显示用户名和密码

JSF link to external site without showing username and password in the URL

我能够通过单击以下代码中的外部 link 执行 SSO(单点登录)。 SSO 有效,但在 url 上看到 username/password。 https://example.org/index.php?userLogin=user1&userPassword=pass123

                  <h:outputLink styleClass="ui-menuitem-link ui-corner-all"
                    value="https://example.org/index.php">

                    <h:outputText value="Ext Tool" />
                    <h:outputText styleClass="ui-icon ui-icon-suitcase"
                        style="float:left" rendered="#{userBean.in}" />
                    <f:param name="userLogin" value="#{userBean.user.eUser}" />
                    <f:param name="userPassword" value="#{userBean.user.ePass}" />
                </h:outputLink>

我也试过如下...

                    <h:commandLink action="#{userBean.eSubmit()}">
                    <h:outputText value="Ext Tool" />
                    <f:param name="userLogin" value="#{userBean.user.eUser}" />
                    <f:param name="userPassword" value="#{userBean.user.ePass}" />
                </h:commandLink>

在bean..我的编码是这样的

    public void eSubmit() throws IOException{
    FacesContext fc = FacesContext.getCurrentInstance();
    fc.getExternalContext().redirect("https://example.org/index.php?userLogin=" + user.getUser() + "&userPassword=" + user.getPass());
}

即使对于带有 commandLink 的上述代码 - 用户名和密码在 URL 中也是可见的。请指导我在 URL 中隐藏密码。

我是 JSF 的新手,所以请帮助我理解...

重定向指示客户端在指定的 URL 上创建新的 GET 请求。这就是您看到它反映在浏览器地址栏中的原因。

至于对外部站点执行 POST,您在这里不一定需要 JSF。您对更新 JSF 模型或调用 JSF 操作不感兴趣。只需使用普通的 HTML POST 形式。

<form method="post" action="https://example.org/index.php">
    <input type="hidden" name="userLogin" value="#{userBean.user.eUser}" />
    <input type="hidden" name="userPassword" value="#{userBean.user.ePass}" />
    <input type="submit" value="Ext Tool" />
</form>

如有必要,添加一些 CSS 使提交按钮看起来像 link,或者添加一些 JS 让 link 提交该表单。