1
votes

Comment puis-je invalider une session http à l'aide de l'identifiant de session

Je suis connecté avec un autre compte d'utilisateur, mais j'ai un hashmap avec l'identifiant de session http créé et je dois invalider une session http en utilisant sessionid .

Y a-t-il un moyen de le faire?


2 commentaires

Créez un servlet qui ferme sa session, puis faites une requête http avec l'ID de session.


Copie possible de Comment puis-je charger Java HttpSession à partir de JSESSIONID?


3 Réponses :


-2
votes

Vous pouvez utiliser la méthode

Enumeration<String> attributes = request.getSession().getAttributeNames();
while (attributes.hasMoreElements()) {
    String attribute = attributes.nextElement();
    session.removeAttribute(attribute);
}

session.invalidate();

OU vous pouvez supprimer tous les attributs de la session et invalider

session.invalidate();


1 commentaires

la question est de savoir comment invalider une session par son identifiant. Ce cas est généralement requis lorsque l'on essaie d'invalider la session en appelant une API à partir d'autres applications.



0
votes

Il n'existe pas de méthode standard pour supprimer une session en connaissant uniquement l'identifiant de session.

Peut-être que vous pouvez tromper le serveur en envoyant le faux identifiant de session (en tant que cookie ou paramètre http) pour prendre le contrôle de la session de l'autre et essayer de l'invalider avec certaines des méthodes de l'application (par exemple "déconnexion").

Mais il n'y a pas de JSP ou quelque chose dans tomcat, qui peut faire cela.

Si vous souhaitez invalider des sessions dans une application que vous déployez sur ce serveur, vous pourriez être intéressé par Comment puis-je charger Java HttpSession à partir de JSESSIONID?


0 commentaires

0
votes

Il existe plusieurs solutions à cela. Solution 1: Décrit ici Comment puis-je charger Java HttpSession à partir de JSESSIONID? Le problème ici est que nous devons stocker toutes les sessions créées dans Map. Il y a un risque de sécurité ici.

Solution 2: Mettre en œuvre une API de déconnexion quelque chose comme ça.

    @RequestMapping(value = "/logout", method = RequestMethod.GET)
public ResponseEntity<Resource> logout(HttpServletRequest request, HttpServletResponse response) {
    HttpSession session = request.getSession(false);
    LOG.info("Clean session: sessionId: [{}]", session == null ? "null" : session.getId());
    if (session != null) {
        session.invalidate();
    }

    return new ResponseEntity<>(new Resource<String>(), HttpStatus.OK);
}

Lors de l'appel de cette API, ajoutez le cookie suivant dans l'en-tête, disons que votre session est 49A77C2ED71E3240FC2CC5DBD20C7CCE alors la requête serait quelque chose comme ça

curl --location --request PUT 'https://your.server.com/ / logout' \ --header 'Autorisation: Certains authToken si nécessaire' \ - cookie d'en-tête: JSESSIONID = 49A77C2ED71E3240FC2CC5DBD20C7CCE; Chemin = / ; Sécurise; HttpOnly '


0 commentaires