На стороне сервера вы можете проверить, истек ли сеанс, и, если это так, выдать пользовательское исключение.
На стороне клиента при каждом асинхронном вызове вы проверяете эту известную ситуацию и реагируете на нее. Вы можете создать абстрактный класс для AsyncCallback
, который будет подклассом для каждого вызова GWT RPC:
public abstract class SessionExpiredAwareAsyncCallback<T> implements AsyncCallback<T> {
@Override
public void onSuccess(T returnObject) {
doOnSuccess(returnObject);
}
@Override
public void onFailure(Throwable exception) {
if (exception instanceof SessionExpiredException) {
goToLoginPage();
} else {
doOnFailure(exception);
}
}
public abstract doOnSuccess(T returnObject);
public abstract doOnFailure(Throwable exception);
}