【问题标题】:GWT Session timeout with Timer带有计时器的 GWT 会话超时
【发布时间】:2019-08-27 08:01:13
【问题描述】:

我正在尝试借助 GWT 计时器实现会话超时,该计时器将对服务器进行 RPC 调用,以使用 lastaccessedtime 检查会话是否有效或过期。但是每次我进行 RPC 调用时,它都会更新 lastaccessedtime(在我进行 RPC 调用时可以理解),有什么方法可以阻止我的 Timer RPC 调用更新 lastaccessedtime?

编写了一些服务器端逻辑来获取 lastaccessedtime 并尝试找出 session 是否有效

com.google.gwt.user.client.Timer elapsedTimer;
public void onModuleLoad() {
    elapsedTimer = new Timer () {
        public void run() {
            validateSession();
        }};

    //giving time delay of 1sec to call the batches 
    elapsedTimer.scheduleRepeating(60000);
}

public void validateSession(){
    //Problem code every time i make this call it updates the last accessed time 
    viewService.validateSessionGWT(new AsyncCallback<ModuleData>() {
        @Override
        public void onFailure(Throwable e) {
            //do something
        }

        @Override
        public void onSuccess(ModuleData data) {
            if(data.getSessionExpired()){
                //redirect to login page
            }
        }
    });
}

任何想法如何克服这个问题或任何其他想法在 GWT 中实现会话管理

注意:已经经历过这类似于我的方法 https://itsecrets.wordpress.com/2011/07/20/session-timeouts-with-gwt-rpc-calls/

【问题讨论】:

    标签: gwt


    【解决方案1】:

    您的 GWT servlet 扩展了 RemoteServiceServlet。因此,您可以覆盖 processPost 并在您的 http 会话中添加自定义的上次调用时间戳。每个请求都会更新此字段。 我建议实现一个由所有 gwt servlet 扩展的抽象 servlet。此外,您不仅应该设置自定义的最后访问字段,还应该在之前检查它,如果一切正常,则只调用 super 方法。

    那么你的计时器和你已经拥有的 servlet 请求应该只检查这个 Session 字段。

    也许不是最好的解决方案,但这应该可行。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多