我使用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");
}
}
但是当会话超时时,没有为我打印任何证明该功能无法正常工作的内容。
答案 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>