Как применить правило 5 минут для каждого сообщения в объекте сеанса в Java? - PullRequest
2 голосов
/ 07 апреля 2010

Я пытаюсь выяснить, как применять правило 5 минут на сообщение / действие.

Я занимаюсь разработкой веб-приложения с Wicket на Java, и у меня есть сеансовый класс, который я планировал использовать для отслеживания этих таймеров для каждого пользователя. Я не планировал хранить метку времени в базе данных.

У меня есть метод ниже в моем классе сеанса, и теперь я пытаюсь выяснить, как сохранить и проверить, есть ли 5-минутная разница между последним разом, когда пользователь опубликовал сообщение, и текущим временем.

Если, скажем, 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 Ответ

2 голосов
/ 07 апреля 2010

Самый надежный способ - сохранить временную метку в базе данных, поскольку клиент может просто выйти из системы, войти в систему или удалить сеанс (удалить cookie или перезапустить веб-браузер), чтобы получить новый сеанс.при любом хранении в сеансе одним из способов будет установка временной метки во время post() и использование ее в качестве материала для сравнения в isAllowedToPost().Вы можете получить текущую метку времени по System#currentTimeMillis().Не требуется java.util.Date.

Пример запуска (при условии, что весь этот компонент имеет сессионную область):

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();
}
...