Jsf 在登录对话框上登录后重定向

Jsf 在登录对话框上登录后重定向,jsf,authentication,redirect,Jsf,Authentication,Redirect,tl;dr:我的问题实际上可以恢复到如何通过字符串刷新页面(当get参数未知时) 我有两个登录用户的场景: 未经身份验证的用户访问受保护的页面他被重定向到登录页面。登录时,他会被重定向到他主要尝试访问的页面 未经验证的用户单击“我的页面”上的按钮,如果该用户未经验证,将显示登录模式对话框 例如: <!-- user connected --> <p:commandButton action="#{pollVoteBean.vote}" value="#{strings.Vo

tl;dr:我的问题实际上可以恢复到如何通过字符串刷新页面(当get参数未知时)

我有两个登录用户的场景:

  • 未经身份验证的用户访问受保护的页面他被重定向到登录页面。登录时,他会被重定向到他主要尝试访问的页面
  • 未经验证的用户单击“我的页面”上的按钮,如果该用户未经验证,将显示登录模式对话框
例如:

<!-- user connected -->
<p:commandButton action="#{pollVoteBean.vote}" value="#{strings.Vote}" rendered="#{userNav.isUserConnected}"/>
<!-- user disconnected -->
<h:panelGroup rendered="#{!userNav.isUserConnected}">
    <p:commandButton type="button" value="#{strings.Vote}" onclick="PF('regSign').show()"/>
<!-- if the user clicks here a log in dialog appears and he can log in. -->
</h:panelGroup>
但是对于对话框,我想刷新页面。如何更改上面的代码,使其同时考虑这两种情况

我就快到了,但是我无法获得带有参数的正确url(当然这些参数是未知的):

(以上代码假定用户已正确验证)。
另外,我的对话框是
dynamic=“true”

我最终将该方法一分为二,因为我没有找到简单的方法

public String signInUser() {
    if (trySignIn()) {
        if (null != lastUrl && !"/signin".equals(lastUrl))
            return lastUrl + "?faces-redirect=true";
        else
            return "/news?faces-redirect=true";
    } else {
        return "signin.xhtml?faces-redirect=true";
    }
}

public void signInFromDlg() {
    trySignIn();
}

然后javascript刷新完成。

@Tiny我最终选择了简单的方法,将我的函数一分为二。你能告诉我为什么你说这不是一个合理的要求吗?
lastUrl = getCorrectUrl(((String) FacesContext.getCurrentInstance()
            .getExternalContext().getRequestMap()
            .get(RequestDispatcher.FORWARD_REQUEST_URI)));
currentUrl = FacesContext.getCurrentInstance().getViewRoot()
        .getViewId();
if ("/signin".equals(currentUrl)) {
    if (null != lastUrl && !"/signin".equals(lastUrl))
        return lastUrl + "?faces-redirect=true";
    else
        return "/news?faces-redirect=true";
} else {
    return currentUrl + "?faces-redirect=true";
}
public String signInUser() {
    if (trySignIn()) {
        if (null != lastUrl && !"/signin".equals(lastUrl))
            return lastUrl + "?faces-redirect=true";
        else
            return "/news?faces-redirect=true";
    } else {
        return "signin.xhtml?faces-redirect=true";
    }
}

public void signInFromDlg() {
    trySignIn();
}