在 Grails + Apache Shiro 中获取会话创建时间

Get session creation time in Grails + Apache Shiro

我的应用程序中有此文本 Last seen: 字段显示当前用户登录系统的时间(例如 5 秒前、4 小时前、3 天前等)。现在我要这样做,我需要确定:

然后减去当前时间。但是我怎样才能访问两者中任何一个的创建时间呢?或者有没有更好的方法可以不使用上述方法来实现这一点?

我不知道 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