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 提交该表单。
我能够通过单击以下代码中的外部 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 提交该表单。