Получить время создания сеанса в Grails + Apache Shiro

Там этот текст Last seen: поле в моем приложении, показывающее, как долго текущий пользователь вошел в систему (например, 5 секунд назад, 4 часа назад, 3 дня назад и т. д.). Теперь для этого мне нужно определить либо:

  • время, когда Apache Shiro выполняет вход в систему; или же
  • время создания текущей сессии Grails.

Затем вычтите его до текущего времени. Но как я могу получить доступ к времени создания любого из двух? Или есть ли лучшие способы добиться этого, не используя вышеупомянутое?

2 ответа

Решение

В вашем действии контроллера вы можете написать так:

class MyController {

    // Considering this action is secured for logged in user only
    def foo() {
        long currentMillis = new Date().getTime()
        long sessionCreationMillis = session.getCreationTime()

        long loggedInFor = currentMillis - sessionCreationMillis
        println "User has been logged in for $loggedInFor miliseconds"
    }
}

Теперь вы получили, как долго пользователь вошел в систему (в миллисекундах). Кроме того, вы можете использовать библиотеку TimeUnit для преобразования ваших миллисекунд в другие значения.

Или вы также можете использовать любую библиотеку Javascript, например, если вы планируете делать это на стороне клиента.

Я понятия не имею об Apache Shiro, но я могу рассказать вам, как получить session creation time,

На самом деле это довольно просто, есть метод getCreationTime() в HttpSession, Вот док

Вы можете вызвать этот метод на session attribute доступны в контроллерах. Это вернет время в миллисекундах как long,

Другие вопросы по тегам