[英]JSF 1.2 IllegalState Exception from backing bean redirect to external site
[英]Navigate to external URL from a backing bean?
我正在嘗試為我的Java EE / JSF2應用程序實現正確的注銷。
它需要兩件事:
Siteminder注銷URL(在策略服務器上配置 - >我無法更改它)在我的應用程序上下文之外。 例如。 如果我的webapp URL是https:// localhost:8080 / sm / MyWebApp,那么注銷URL是https:// localhost:8080 / anotherwebapp / logout.html 。
這是當前的本地注銷代碼:
public void logout() {
System.out.println("Logging out...");
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
try {
request.logout();
} catch (ServletException e) {
e.printStackTrace();
}
HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
if (session != null) {
session.invalidate();
}
}
以下是生成注銷URL的屬性:
public String getLogoutUrl() {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String requestServer = request.getServerName();
String requestScheme = request.getScheme();
int serverPort = request.getServerPort();
String logoutUrl = requestScheme + "://" + requestServer + ":" + Integer.toString(serverPort) + "/anotherwebapp/logout.html";
return logoutUrl;
}
但是,我找不到可以調用logout()然后打開外部URL的JSF2 / Primefaces組件。 例如,如果我有:
<h:outputLink value="#{authBean.logoutUrl}" onclick="#{authBean.logout()}">[Logout]</h:outputLink>
然后onclick似乎沒有被調用。
我嘗試的另一種方法是將外部URL放在注銷函數的末尾,使其作為導航字符串返回,但無法識別(也嘗試使用“?faces-redirect = true”...)。
任何幫助,將不勝感激。
您也可以使用ExternalContext#redirect()
。
public void logout() throws ServletException, IOException {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
((HttpServletRequest) ec.getRequest()).logout();
ec.invalidateSession();
ec.redirect("http://example.com/anothercontext/logout");
}
無需具有元刷新的中介頁面。
您可以創建頁面logout.xhtml,因此代碼如下所示:
public String getLogoutUrl() {
return "/logout.jsf";
}
並在頁面中添加:
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=https://localhost:8080/anotherwebapp/logout.html">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.