2015-12-29 1 views
2

Il y a ce texte Last seen: champ dans mon application qui montre combien de temps l'utilisateur actuel est connecté sur le système (par exemple, il y a 5 secondes, 4 heures, 3 jours, etc.) . Maintenant pour moi de faire cela, j'ai besoin de déterminer soit:Obtenez le temps de création de la session dans Grails + Apache Shiro

  • le temps Apache Shiro effectue la connexion; ou
  • l'heure à laquelle la session Grails en cours a été créée.

Puis soustrayez-le à l'heure actuelle. Mais comment puis-je accéder à l'heure de création de l'un des deux? Ou y a-t-il de meilleurs moyens d'y parvenir sans utiliser ce qui est mentionné ci-dessus?

Répondre

3

Dans votre contrôleur d'action vous pouvez écrire comme ceci:

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" 
    } 
} 

Maintenant, vous avez combien de temps l'utilisateur a été connecté (en millisecondes). En outre, vous pouvez utiliser la bibliothèque TimeUnit pour convertir vos millisecondes en d'autres valeurs. Vous pouvez également utiliser n'importe quelle bibliothèque Javascript comme this si vous envisagez de le faire du côté client.

3

Je n'ai aucune idée sur Apache Shiro mais je peux vous dire comment obtenir le session creation time.

C'est assez simple en fait, il y a une méthode appelée getCreationTime() en HttpSession. Voici la doc

Vous pouvez appeler cette méthode sur le session attribute disponible dans les contrôleurs. Cela retournera le temps en millisecondes comme long.