Session 未验证时发送“需要验证的消息”,会话超时时发送“会话已过期”

Session 未验证时发送“需要验证的消息”,会话超时时发送“会话已过期”,session,jsf-2,primefaces,Session,Jsf 2,Primefaces,我正在使用登录过滤器,并且已经成功地实现了它们。但现在,我需要通过在地址栏中直接给出页面的URL来显示一条错误消息,说明如果用户试图查看页面,则需要进行身份验证 另外,当会话超时时,我需要显示一条错误消息,如会话已过期。 按照大家的建议,后者的实现(使用过滤器重定向到login或index.xhtml)已经结束。但是我想显示错误信息 有什么帮助吗? 提前感谢您可以尝试对页面正文执行类似于onload检查的操作,这将调用remotecommand。在remotecommand的操作本身中,可以指定

我正在使用登录过滤器,并且已经成功地实现了它们。但现在,我需要通过在地址栏中直接给出页面的URL来显示一条错误消息,说明如果用户试图查看页面,则需要进行身份验证

另外,当会话超时时,我需要显示一条错误消息,如会话已过期。 按照大家的建议,后者的实现(使用过滤器重定向到login或index.xhtml)已经结束。但是我想显示错误信息

有什么帮助吗?
提前感谢

您可以尝试对页面正文执行类似于onload检查的操作,这将调用remotecommand。在remotecommand的操作本身中,可以指定执行检查的Bean方法:

<h:body  id="page_body"  onload="isConnected();">
    <h:form >
        <p:remoteCommand name="isConnected" update=":page_body" autoRun="false" action="#{myBean.checkIfLoggedIn()}"/>
    </h:form>
    ..................
</h:body>
请看我的回答: 在您的情况下,应该使用url参数让视图知道它应该在@PostConstruct中添加FacesMessage,而不是使用flash或会话范围

在您的bean中,您可以放置:

@PostConstruct
public void init() {
    String showMessage = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("showMessage");
    if ("true".equals(showMessage)) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Authentication Required", "place your detailed message here"));
    }
}

发布您尝试过的内容ahi makky,我点击了web.xml文件并指定了错误页面,异常类型查看过期异常,与其他许多人一样。嗨,tushee,谢谢您的回复。但是,既然我是jsf新手,你能不能在@postconstruct和url参数中显示一些添加facesMessage的代码我已经用@postconstruct方法编辑了我的答案,正如你所说的,当会话到期时,我在servlet筛选器中附加以下httpResponse.sendRedirecthttpRequest.getContextPath+/faces/login.xhtml?showMessage=true,但在我的bean中,当我使用FacesContext.getCurrentInstance.getExternalContext.getRequestParameterMap.getshowMessage访问该值时,字符串showMessage中存储的值为null!!知道吗?重定向之后,你在url中看到请求参数了吗?对不起,tushee,我在servlet过滤器中犯了一个小错误。现在我改正了。谢谢你的回答。它成功了!