如何在独立的Swing应用程序中设置会话超时?

时间:2016-08-25 07:02:54

标签: java swing

我有一个独立的摇摆应用程序。我希望在Web应用程序中将会话无效。

如何在独立的Swing应用程序中设置会话超时?

1 个答案:

答案 0 :(得分:5)

如果在独立swing应用程序中没有服务器通信,则只有一个条件来检查会话是否有效:用户在应用程序中提供鼠标或键事件。这是我的例子,如何使用这个标准:

import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.WindowConstants;

public class SessionHandlerExample implements ActionListener {

    private static final int SESSION_TIMEOUT = 30 * 1000; // 30 sec timeout for testing purposes
    private final Timer invalidationTimer = new Timer(SESSION_TIMEOUT, this);
    private final JFrame frm = new JFrame("Session test frame");
    /**
     * 
     */
    public SessionHandlerExample() {
        initUI();
    }

    /**
     * 
     */
    private void initUI() {
        final JTextArea text = new JTextArea(20, 80);
        frm.add(new JScrollPane(text));
        frm.pack();
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setVisible(true);
        invalidationTimer.setRepeats(false);
        invalidationTimer.restart();

        // register listener to get all mouse/key events
        final AWTEventListener l = new AWTEventListener() {

            @Override
            public void eventDispatched(AWTEvent event) {
                // if any input event invoked - restart the timer to prolong the session
                invalidationTimer.restart();
            }
        };
        Toolkit.getDefaultToolkit().addAWTEventListener(l, AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        // provide session invalidation here (show login dialog or do something else)
        JOptionPane.showMessageDialog(frm, "Your session is invalide");
        invalidationTimer.restart();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new SessionHandlerExample();
            }
        });
    }
}

如果您的应用程序中有服务器交互,则可以将失效计时器绑定到服务器交互框架(在向服务器发送任何请求时重新启动计时器)。