2015-12-29 47 views
2

我的應用程序中有Last seen:字段顯示當前用戶在系統上登錄多長時間(例如5秒前,4小時前,3天前等) 。現在對我來說,我需要確定:在Grails + Apache Shiro中獲取會話創建時間

  • Apache Shiro執行登錄的時間;或
  • 當前Grails會話創建的時間。

然後將其減去當前時間。但是我怎樣才能訪問兩者中的任何一個的創建時間?還是有沒有更好的方法來實現這個不使用上面提到的?

回答

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庫將毫秒轉換爲其他值。或者,您也可以使用任何Javascript庫,如this,如果您打算在客戶端執行此操作。

3

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

實際上很簡單,在HttpSession中有一種叫做getCreationTime()的方法。這裏是doc

您可以在控制器中的session attribute上調用此方法。這將以毫秒爲單位返回long