我正在嘗試爲我的Java EE/JSF2應用程序實現適當的註銷。從支持bean導航到外部URL?
它需要兩兩件事:
- 我需要從JAAS註銷和無效的會話
- 我則必須導航到外部URL火的SiteMinder註銷
在SiteMinder註銷URL(在策略服務器上配置 - >我無法更改它)位於我的應用程序上下文之外。例如。如果我的webapp網址是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;
}
但是,我無法找到一個JSF2/Primefaces組件,它可以調用註銷()然後打開外部URL。例如,如果我有:
<h:outputLink value="#{authBean.logoutUrl}" onclick="#{authBean.logout()}">[Logout]</h:outputLink>
然後onclick似乎並沒有被調用。
我嘗試的另一種方法是將外部URL放到註銷函數的末尾,讓它作爲導航字符串返回,但它不被識別(也嘗試使用「?faces-redirect = true」...)。
任何幫助,將不勝感激。
非常感謝!刷新重定向解決了我的問題! – egbokul 2010-07-21 10:38:09