5

我正在使用 GXT、Hibernate、mysql 等开发 Web 应用程序。该应用程序有一个登录页面。实际上,当会话到期时,我在设置登录页面时遇到了问题。我们可以在 web.xml 文件中设置超时,但在这种情况下我们无法重定向到登录页面。你能告诉我如何实现吗?

4

4 回答 4

3

您不能进行服务器端重定向,因为该应用程序完全是 AJAX。您可以做的是使用 GWT Timer 类,并为您的每一个 RPC 调用检查/重置计时器。如果“会话”过期,那么您将通过历史令牌重定向到登录页面。这对我来说是最简单的方法

其他一些阅读:

http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b9eab8daaa993c83/d0192d356045e061?pli=1

http://gwt-ext.com/forum/viewtopic.php?f=9&t=1682

于 2010-07-30T19:42:24.270 回答
2

我使用了在会话到期时在服务器端抛出异常的概念,然后尝试在客户端捕获异常。我不知道是否有更好的方法来做到这一点。

于 2010-08-02T12:48:55.007 回答
2

在服务器端,您可以检查会话是否过期,如果是,则抛出自定义异常。在客户端,在每次异步调用时,您都会检查这种已知情况并做出反应。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);
}
于 2011-07-08T06:04:51.753 回答
1

您可以使用 gwteventservice 将事件从服务器触发到客户端。

于 2014-08-19T21:10:24.220 回答