Тайм-аут сеанса входа в систему Eclipse RCPJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Тайм-аут сеанса входа в систему Eclipse RCP

Сообщение Anonymous »

У нас есть приложение на базе Eclipse RCP, которое использует подключаемые модули Eclipse 3.6 и Java 1.8. Мне нужно реализовать тайм-аут сеанса входа в приложение для приложения. Я не слишком знаком с RCP. Я немного погуглил и нашел решение здесь. Моя реализация, похоже, не работает, если открыто другое всплывающее окно.
Я создал следующий класс:

Код: Выделить всё

public class SessionManager {

private long timeStampLastMs;
private long timeOutTimeMs = 20000L;
private static SessionManager sessionManager = null;

private SessionManager() {

}

public static SessionManager getSessionManager() {
if (sessionManager == null) {
sessionManager = new SessionManager();
}
return sessionManager;
}

public synchronized boolean isActivityTimeOut() {

boolean timeout = false;
long now = System.currentTimeMillis();

if (timeOutTimeMs < (now - timeStampLastMs)) {
timeout = true;
}

return timeout;
}

public synchronized void resetActivityTimeOut() {
timeStampLastMs =  System.currentTimeMillis();
}

public void timeoutScreen() {
int defaultIndex = 0;
MessageDialog dialog = new MessageDialog(null, "Information", null,
"Login session expired. Please close this window and restart application", MessageDialog.INFORMATION,
new String[] { IDialogConstants.OK_LABEL }, defaultIndex);
dialog.open();
}
}
В класс ApplicationWorkbenchAdvisor добавлен следующий метод, который расширяет WorkbenchAdvisor.

Код: Выделить всё

@Override
public void eventLoopIdle(Display display) {

SessionManager sessionManager = SessionManager.getSessionManager();
if (sessionManager.isActivityTimeOut()) {
sessionManager.timeoutScreen();
display.dispose();
System.exit(0);
}

super.eventLoopIdle(display);
}
Чтобы сбросить таймер, я внес изменения в метод run класса приложения, который реализует IPlatformRunnable:

Код: Выделить всё

public Object run(Object args) throws Exception {

Listener uiListener = new Listener() {
@Override
public void handleEvent (Event event) {
SessionManager.getSessionManager().resetActivityTimeOut();
}
};
Display display = PlatformUI.createDisplay();
display.addFilter(SWT.KeyUp, uiListener);
display.addFilter(SWT.MouseUp, uiListener);
display.addFilter(SWT.Activate, uiListener);

try {
final Session session = Session.getInstance();
Platform.endSplash();
if (!login(session))
return IPlatformRunnable.EXIT_OK;

int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IPlatformRunnable.EXIT_RESTART;
}
return IPlatformRunnable.EXIT_OK;
} finally {
display.dispose();
}
}
Это нормально работает с главным окном при выполнении eventLoopIdle(). Но когда всплывающие диалоговые окна открыты, eventLoopIdle(), похоже, не выполняется и тайм-аут не происходит.
Что мне нужно сделать, чтобы это заработало?

Подробнее здесь: https://stackoverflow.com/questions/792 ... on-timeout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»