Il y a ce champ de texte Last seen: dans mon application qui indique pendant combien de temps l'utilisateur actuel est connecté au système (par exemple, il y a 5 secondes, il y a 4 heures, il y a 3 jours, etc.). Maintenant, pour que je fasse cela, je dois déterminer soit:

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

Puis soustrayez-le à l'heure actuelle. Mais comment puis-je accéder à l'heure de création de l'un ou l'autre des deux? Ou existe-t-il de meilleures façons d'y parvenir sans utiliser ce qui précède?

2
Gideon 29 déc. 2015 à 14:28

2 réponses

Meilleure réponse

Dans votre action de contrôleur, 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"
    }
}

Vous avez maintenant la durée de connexion de l'utilisateur (en millisecondes). De plus, vous pouvez utiliser le TimeUnit bibliothèque pour convertir vos millisecondes en d'autres valeurs.

Vous pouvez également utiliser n'importe quelle bibliothèque Javascript comme ceci si vous prévoyez de le faire côté client.

3
Shashank Agrawal 29 déc. 2015 à 12:26

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

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

Vous pouvez invoquer cette méthode sur le session attribute disponible dans les contrôleurs. Cela renverra l'heure en millisecondes sous la forme long.

3
Ashraf Purno 29 déc. 2015 à 12:18