2

私は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呼び出しでのみタイマーをリセットします。マウスの動きも検出したい。

誰かが解決策を提案できますか?前もって感謝します。

4

1 に答える 1

4

モジュールのロード時に、このようなコードを実行できます。

2 分ごとに実行されるタイマーを 1 つ作成し、セッションの期限切れフラグを設定します。

    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 は、SessionFactory がカスタム ファクトリ コードであるということではなく、セッション期限切れチェックの定数変数です。私のプロジェクトがパターン化した変数を使用したことを無視してください。あなたはそれ以上の定数を1つだけ設定する必要があります。まだ質問があれば教えてください。

于 2012-06-22T14:47:34.963 に答える