我的應用程序中有Last seen:
字段顯示當前用戶在系統上登錄多長時間(例如5秒前,4小時前,3天前等) 。現在對我來說,我需要確定:在Grails + Apache Shiro中獲取會話創建時間
- Apache Shiro執行登錄的時間;或
- 當前Grails會話創建的時間。
然後將其減去當前時間。但是我怎樣才能訪問兩者中的任何一個的創建時間?還是有沒有更好的方法來實現這個不使用上面提到的?
我的應用程序中有Last seen:
字段顯示當前用戶在系統上登錄多長時間(例如5秒前,4小時前,3天前等) 。現在對我來說,我需要確定:在Grails + Apache Shiro中獲取會話創建時間
然後將其減去當前時間。但是我怎樣才能訪問兩者中的任何一個的創建時間?還是有沒有更好的方法來實現這個不使用上面提到的?
在你的控制器動作,你可以這樣寫:
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,如果您打算在客戶端執行此操作。
我不知道Apache Shiro,但我可以告訴你如何獲得session creation time
。
實際上很簡單,在HttpSession
中有一種叫做getCreationTime()
的方法。這裏是doc
您可以在控制器中的session attribute
上調用此方法。這將以毫秒爲單位返回long
。