【问题标题】:how to show error message when session time out glassfish security?会话超时 glassfish 安全性时如何显示错误消息?
【发布时间】:2014-04-28 16:26:24
【问题描述】:

我在使用 jsf 的 J2ee 项目中使用带 Realm 的 Glassfish 安全性。我的会话在 30 分钟后超时。

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

但您希望在会话结束时用户单击组件之前出现对话框或消息需要出现以警告用户会话已过期。

这就是为什么我尝试这种方式但使用 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");
        }
    }

但是当会话超时时没有为我打印任何内容,这证明该功能不起作用。

【问题讨论】:

    标签: java jsf session glassfish


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你的回答只是想知道多少18000000 = 18分钟??
    • 哎呀,我认为它以毫秒为单位,18,000,000 所以这是 18,000 秒或 5 小时。所以 5 分钟就是 5*60*1000=300,000。
    【解决方案2】:

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

    尝试将此作为错误消息:

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

    【讨论】:

    • 是的,我只想在 glassfish 中看到以进行测试,然后再实施新代码……只是为了验证我的函数是否被调用
    • 看,如果我是你,我会用 session.setMaxInactiveInterval(...) 设置一个最大间隔,并设置一个状态属性,比如:session.setAttribute("status", "active" );然后,对于每个页面,我会检查会话是否处于活动状态,如下所示:
    • 我需要在会话超时时调用函数的所有页面中的侦听器。
    • 但问题是会话关闭了我如何才能显示一条消息??
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2014-07-17
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多