在 Grails + Apache Shiro 中获取会话创建时间
Get session creation time in Grails + Apache Shiro
我的应用程序中有此文本 Last seen:
字段显示当前用户登录系统的时间(例如 5 秒前、4 小时前、3 天前等)。现在我要这样做,我需要确定:
- Apache Shiro 执行登录的时间;或者
- 创建当前 Grails 会话的时间。
然后减去当前时间。但是我怎样才能访问两者中任何一个的创建时间呢?或者有没有更好的方法可以不使用上述方法来实现这一点?
我不知道 Apache Shiro,但我可以告诉你如何获得 session creation time
。
其实很简单,HttpSession
中有一个方法叫getCreationTime()
。这是 doc
您可以在控制器中可用的 session attribute
上调用此方法。这将 return 以毫秒为单位的时间为 long
。
在你的控制器动作中你可以这样写:
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 库,例如 this。
我的应用程序中有此文本 Last seen:
字段显示当前用户登录系统的时间(例如 5 秒前、4 小时前、3 天前等)。现在我要这样做,我需要确定:
- Apache Shiro 执行登录的时间;或者
- 创建当前 Grails 会话的时间。
然后减去当前时间。但是我怎样才能访问两者中任何一个的创建时间呢?或者有没有更好的方法可以不使用上述方法来实现这一点?
我不知道 Apache Shiro,但我可以告诉你如何获得 session creation time
。
其实很简单,HttpSession
中有一个方法叫getCreationTime()
。这是 doc
您可以在控制器中可用的 session attribute
上调用此方法。这将 return 以毫秒为单位的时间为 long
。
在你的控制器动作中你可以这样写:
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 库,例如 this。