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

时间:2015-12-29 11:28:44

标签: grails httpsession

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

  • Apache Shiro执行登录的时间;或
  • 创建当前Grails会话的时间。

然后将其减去当前时间。但是如何才能访问两者中任何一个的创建时间?或者有没有更好的方法来实现这一点,而不是使用上面提到的?

2 个答案:

答案 0 :(得分:3)

我不知道Apache Shiro,但我可以告诉你如何获得session creation time

实际上非常简单,getCreationTime()中有一个名为HttpSession的方法。这是doc

您可以在控制器中提供的session attribute上调用此方法。这将以毫秒为单位返回long

答案 1 :(得分:3)

在您的控制器操作中,您可以这样写:

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库将毫秒转换为其他值。

或者,如果您打算在客户端进行此操作,也可以使用this之类的任何Javascript库。