JSF链接到外部网站,但未在网址

时间:2015-06-15 15:23:52

标签: jsf post single-sign-on commandlink

我可以通过以下代码点击外部链接进行SSO(单点登录)。 SSO有效,但在网址上可以看到用户名/密码。 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中看到UserName和密码。请引导我在URL中隐藏密码。

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

1 个答案:

答案 0 :(得分:1)

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

对于对外部站点执行POST,您不一定需要JSF。您对更新JSF模型或调用JSF操作不感兴趣。只需使用纯HTML表单。

<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来使提交按钮看起来像一个链接,或者让一些JS让链接提交该表单。