如何在会话超时glassfish安全性时显示错误消息?

时间:2014-03-21 10:39:59

标签: java jsf session glassfish

我使用jsf为我的J2ee项目使用Realfish的Glassfish安全性。我的会话时间为30分钟。

当我点击组件时,它会重定向到登录页面,这很好。

但是你想要在会话结束时用户点击组件或者msg需要apear来警告用户会话已经过期。

这就是为什么我尝试这种方式但使用jsf监听器无效:

<f:event listener="#{Logincontroller.checksessiontimeout}" type="preRenderView"/>

并且在管理中:

public void checksessiontimeout(ComponentSystemEvent event) 
    {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest)             context.getExternalContext().getRequest();
        if (request.getRequestedSessionId()!=null && !request.isRequestedSessionIdValid())
        { 
            System.out.println("Session Log OUT");
        }
    }

但是当会话超时时,没有为我打印任何证明该功能无法正常工作的内容。

2 个答案:

答案 0 :(得分:0)

如果您想向用户显示错误消息,我建议您使用javascript执行此操作。我认为System.out.println只会在Glassfish的控制台上打印一行。

尝试将此作为错误消息:

out.print("<script>alert(\"Session timed out!\");</script>");

答案 1 :(得分:0)

如果你不能使用OmniFaces,那么使用idleMonitor每x毫秒检查会话状态怎么样? 当用户离开5分钟后回到网页时,将触发以下内容。唯一的问题是,如果用户坐在那里,在没有实际做任何事情的情况下将鼠标移动到网页上,它就不会被激发,但会话仍然会超时。

<p:idleMonitor timeout="18000000">
<p:ajax event="active" listener="#{Logincontroller.checksessiontimeout}" />
</p:idleMonitor>