Получить время создания сеанса в 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
,