Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将/ibm\u security\u logout的extern JSP/HTML片段嵌入到JSF中?_Java_Jsp_Jsf_Logout - Fatal编程技术网

Java 如何将/ibm\u security\u logout的extern JSP/HTML片段嵌入到JSF中?

Java 如何将/ibm\u security\u logout的extern JSP/HTML片段嵌入到JSF中?,java,jsp,jsf,logout,Java,Jsp,Jsf,Logout,我尝试在JSF项目中实现/ibm\u security\u logout逻辑。 对于我应该使用的注销方式有一些要求 它应符合以下格式: <FORM METHOD=POST ACTION="<%=request.getContextPath()%>/ibm_security_logout" NAME="LogoutForm"> <INPUT TYPE="HIDDEN" NAME="logoutExitPage" VALUE="/../weblogin/logout?d

我尝试在JSF项目中实现
/ibm\u security\u logout
逻辑。 对于我应该使用的注销方式有一些要求

它应符合以下格式:

<FORM METHOD=POST ACTION="<%=request.getContextPath()%>/ibm_security_logout"
NAME="LogoutForm">
<INPUT TYPE="HIDDEN" NAME="logoutExitPage"
VALUE="/../weblogin/logout?dest=/myapp/goodbye.jsp">
<INPUT TYPE="submit" NAME="logout" VALUE="Logout">
</FORM>
编辑

{request.contextPath}
=localhost:9080/MyProject
登录页面=localhost:9080/weblogin/Login?webapp=/MyProject(登录页面通过外部框架管理)
注销也通过外部框架进行管理。因此,URL必须符合此值=“/../weblogin/logout?dest=/weblogin/login?webapp=/MyProject”

我用下面的代码试过了,但没用

<form id="logout" action="#{request.contextPath}/ibm_security_logout"
            method="post">
<input type="hidden" name="logoutExitPage"
            value="/../weblogin/logout?dest=/weblogin/login?webapp=/MyProject">
<a  href="#" onclick="document.getElementById('logout').submit()">Logout_NEU</a>
</form>

使用
外部上下文#invalidateSession()
单独使用是不够的。如果您使用了ibm的登录功能,则绝对需要直接发布到
/ibm\u security\u logout
。这不仅会使会话无效,还会清除SSO cookie和LPTA身份验证。否则,用户在无效后仍可能自动登录

您可以在JSF中使用纯HTML。我只想中和那些90年代风格的大写标记/属性,因为大写/camelcase HTML标记/属性在XHTML中无效(我假设您使用的是Facelets;您的问题历史记录至少确认您使用的是Facelets)


或者如果你真的需要一个链接来提交表单



请注意,
logoutExitPage
必须表示注销后登录页的URL。它不一定要精确表示
/../weblogin/logout?dest=/myapp/bye.jsp
。这只是一个示例。

它是否也会使jsf会话无效?
/ibm\u security\u logout
已经使会话无效(在清除SSO cookie和LPTA身份验证之间)。因此,如果您只使用
ExternalContext#invalidateSession()
,您仍然会在客户端中得到一个悬空的SSO cookie,在缓存中得到LPTA身份验证。@DaDaDom::)即使如此,在使用基于XML的Facelets作为默认视图技术的JSF2中,它也会抛出XML解析错误/警告,因为按照XHTML名称空间
http://www.w3.org/1999/xhtml
。还需要第二个链接。请查看我的更新。请描述“它不起作用”“从开发人员的角度来看,而不是从最终用户的角度来看。作为第一步,HTTP POST请求是否使用所需参数触发?
<h:commandLink value="Log Out" action="#{sessionController.logout}" />
public void logout() throws IOException {

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.invalidateSession();
    ec.redirect("/../weblogin/logout?dest=/myapp/goodbye.jsp");

}
<form id="logout" action="#{request.contextPath}/ibm_security_logout"
            method="post">
<input type="hidden" name="logoutExitPage"
            value="/../weblogin/logout?dest=/weblogin/login?webapp=/MyProject">
<a  href="#" onclick="document.getElementById('logout').submit()">Logout_NEU</a>
</form>