Où est JSESSIONID stockées? (JavaEE)
J'ai deux applications - Une application web Java EE et une applet Java SE. Je veux pour authentifier un utilisateur dans l'applet par le biais d'un JSESSIONID (qui est créé par l'application web).
Il y a un problème - comment associer cette JSESSIONID avec un utilisateur particulier?
Comment vérifier (sur le serveur d'applications web côté) de l'utilisateur qui est représenté par ces JSESSIONID? Dans l'applet, je vais le lire à partir d'un cookie, et puis je veux écrire une Servlet simple qui va accepter cette JSESSIONID comme un message. Par la suite, j'aimerais écrire dans la réponse, rien du tout quand le JSESSIONID est mauvais, et les infos sur l'utilisateur si JSESSIONID est bonne (c'est à dire représentant quelqu'un).
Personne ne sait comment faire cela?
OriginalL'auteur marxin | 2012-05-13
Vous devez vous connecter pour publier un commentaire.
JSESSIONID
est un bas niveau de mécanisme que vous ne doit généralement pas s'en soucier. Sur le serveur du conteneur de servlet traduit de manière transparenteJSESSIONID
à unHttpSession
objet disponible dans la servlet. L'id de session est transmis au serveur de façon transparente en utilisantCookie
en-tête ou la réécriture d'URL.Donc, si vous cliquez sur un lien, ou de poster une forme ordinaire dans une page web, le navigateur passe automatiquement en
JSESSIONID
cookies ou qu'il attache à l'URL.Votre conception a un défaut majeur: sécuriser les conteneurs de servlet doit ajouter
HttpOnly
attributJSESSIONID
cookie (voir: Comment voulez-vous configurer les cookies HttpOnly dans tomcat /java webapps?) C'est pour éviter le JavaScript à partir de la lectureJSESSIONID
cookie pour des raisons de sécurité - comme le détournement de session de l'utilisateur. Votre applet peut même pas voir ce cookie!Je ne sais pas beaucoup au sujet de applets, mais je vous conseille d'effectuer la requête HTTP via un navigateur web d'une certaine manière donc l'identification de sécurité (cookie) est géré automatiquement.
OriginalL'auteur Tomasz Nurkiewicz
Java EE conteneur font la plupart du travail pour vous. Il ya un couple de raccourcis que vous pouvez prendre en fonction avec la méthode d'authentification que vous utilisez et les détails de la façon dont le conteneur se comporte. Je vais ignorer ces raccourcis pour l'instant. Je suis en supposant que l'utilisateur fournit les informations à l'application web dans une certaine forme - par exemple en ouvrant une session.
Lorsque l'utilisateur se connecte, créer une session (si l'on doe morve existent déjà) et ajouter leur nom d'utilisateur (et tous les autres détails que vous voulez) pour la session en tant qu'attributs de session.
Lorsqu'on lui demande qui a déjà une session, il suffit de récupérer les détails de l'utilisateur de la session. Le conteneur prend soin de cartographie de l'ID de session dans la demande vers la droite de l'objet session et de faire ce qui est disponible à la demande.
Si l'ID de session est invalide, le conteneur ne sera pas associer un objet de session à la demande.
Une dernière chose à regarder dehors pour est des cookies HttpOnly. Les conteneurs doivent être à l'aide de ces par défaut pour les Identifiants de session (pour la protéger contre les attaques XSS). Pour l'ID de session à la disposition de l'applet, vous devez désactiver le HttpOnly de protection pour les cookies de session. Cela signifie que si l'application a une vulnérabilité XSS, il sera facile pour un attaquant de voler les cookies de session utilisateur.
OriginalL'auteur Mark Thomas