如何在Java中的会话对象中强制执行每个5分钟的发布规则?

时间:2010-04-06 22:25:35

标签: java date wicket

我正在试图弄清楚如何执行每个帖子/操作规则5分钟。

我正在用Java开发一个带Wicket的Web应用程序,我有一个会话类,我打算用它来跟踪每个用户的这些定时器。我没打算将时间戳存储在数据库中。

我的会话课程中有以下方法,现在我正在试图弄清楚如何存储和检查用户上次发布的时间与当前时间之间有5分钟的差异。< / p>

如果,让我们说java.util.Date,适合这个,我如何在几分钟内得到其中两个之间的区别。

public boolean isAllowedToPost() {  
    if(null OR has 5 minutes passed since last post) {  
        // set the new timestamp      
        return true;    
    }  
    else   
    {   
        return false;  
    }  
}

1 个答案:

答案 0 :(得分:2)

最强大的方法是将时间戳存储在数据库中,因为客户端可以简单地注销/登录或删除会话(删除cookie或重新启动webbrowser)以获得新会话。

如果您坚持以任何方式将其存储在会话中,那么其中一种方法是在post()期间设置时间戳并将其用作isAllowedToPost()中的比较材料。您可以按System#currentTimeMillis()获取当前时间戳。无需java.util.Date

Kickoff示例(假设整个bean是会话作用域):

private static final long MAX_WAIT_FOR_POST = 300000L; // ..ms = 5 minutes.
private long lastPost; // Defaults to 0 anyway.

public void post() {
    lastPost = System.currentTimeMillis();
    // ...
}

public boolean isAllowedToPost() {
    return (lastPost + MAX_WAIT_FOR_POST) < System.currentTimeMillis();
}