以 GWT 为单位的会话超时的鼠标移动



我正在研究GWT。 在我的应用程序中,我想在 2 分钟后添加会话超时,当不执行任何操作(包括鼠标事件)时。

我编写了一个类,其中使用了 GWT 会话对象。

public static boolean ValidSession(HttpSession session) {
        boolean aResult = true;
        logger.debug("Start of ValidSession");
        try
        {
            if(session!=null )
            {
                String strUserInf="";
                strUserInf=(String)session.getAttribute("userInf");
                logger.debug("User Inf in session is: " + strUserInf);
                if(strUserInf==null || strUserInf.trim().equals(""))
                {
                    logger.debug("User Info blank");
                    aResult =false;
                }
            }
            else
            {
                logger.debug("SessionNull");
                aResult=false;
            }
        }
        catch (Exception e) 
        {
            logger.error("Exception in ValidSession: ", e);
            aResult = false;                        
        }
        logger.debug("End of isSessionValid");
        return aResult;
    }
    public static void TimeUpdate(HttpSession session){
        session.setAttribute("lastAccessed", String.valueOf(session.getLastAccessed()));
        System.out.println("lastAccessed "+ session.getAttribute("lastAccessed"));
       }

但它仅在 RPC 调用时重置计时器。我也想检测鼠标移动。

任何人都可以提出解决方案吗?提前谢谢。

您可以在模块加载时执行这样的代码。

创建一个每 2 分钟运行一次的计时器,并设置会话过期标志:

    private static Timer SESSION_TIMER = new Timer() {
            public void run() {
                SessionFactory.putValue(SesisonKey.SESSION_EXPIRED,
                        true);
            }
        };

使用此方法调用此方法 续订计时器会话,如下所示 在模块加载时:

    public static void renewTimer() {
            if (CLIENT_SIDE_TIMER != null) {
                CLIENT_SIDE_TIMER.cancel();
                SessionFactory.getClientInstance().put(
                        SesisonKey.SESSION_EXPIRED, false);
                //CLIENT_SIDE_TIMER.schedule(250 * 60 * 20);
                //1 Minute = 60000 Milliseconds
                CLIENT_SIDE_TIMER.schedule(60000 * 2);
            }
        }

NativePreviewHandler 处理程序捕获鼠标事件,并检查会话是否已过期或未标记。

 final NativePreviewHandler nativeHandler = new NativePreviewHandler() {
                    @Override
                    public void onPreviewNativeEvent(NativePreviewEvent event) {
                    preventBack();
                        if (SessionFactory
                                .getValue(SesisonKey.CLIENT_SESSION_EXPIRED) != null) {
                            boolean expire = (Boolean) SessionFactory
                                    .getValue(SesisonKey.CLIENT_SESSION_EXPIRED);
                            if (expire) {
                                boolean show= false;
                                //logout session code
                                ClientSideTimers.renewSessionTimer();
                            }
                        }
                    }
                };
                Event.addNativePreviewHandler(nativeHandler);

如果您的屏幕稳定 2 分钟,它将通过计时器设置过期会话变量值 false,如果值为 false,则注销。

SESSION_EXPIRED是会话过期检查的常量变量,而不是会话工厂是我的自定义工厂代码。你只是忽略了我的项目模式使用的变量。您只需设置一个常量,不超过该常量。如果还有疑问,请告诉我。

最新更新