簡體   English   中英

從支持bean導航到外部URL?

[英]Navigate to external URL from a backing bean?

我正在嘗試為我的Java EE / JSF2應用程序實現正確的注銷。

它需要兩件事:

  1. 我需要從JAAS注銷並使會話無效
  2. 然后,我必須導航到外部URL以觸發Siteminder注銷

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM