2010-11-26 18 views
0

Une fois qu'un utilisateur est authentifié, j'ai un ID utilisateur d'objet.Où dois-je stocker une clé d'identification utilisateur dans la sécurité printemps/printemps dans une application web?

Où est le «meilleur» endroit pour stocker cela au printemps en utilisant Spring-Security (ceci est une webapp)?

  • session semble inélégant, parce que j'ai deux emplacements à gérer l'authentification (je besoin d'un code spécial pour gérer la suppression de l'objet sesion lorsque l'utilisateur est connecté pour une raison quelconque)
  • Le GetDetails de currentContext.getAutentication(). (...) semble compliqué car il semble générer l'objet détails par requête

Il existe de nombreuses options, mais la meilleure semble être quelque part proche du mécanisme d'authentification Spring-Security.

Répondre

1

Je ne suis pas sûr de la question. Vous n'êtes pas obligé de le stocker. Les sont de multiples façons de l'obtenir.

  1. SecurtiryContextHolder si vous avez besoin de l'objet UserDetails
  2. request.getRemoteUser() si vous avez besoin que le loginid
+0

Le SecurityContextHolder vous permet uniquement de renvoyer un nom d'utilisateur String, et non un objet arbitraire. J'ai fini par étendre le mécanisme d'authentification afin que je retourne mon propre objet d'authentification personnalisé qui supporte l'ajout d'objets arbitraires à une carte, ce qui me permet d'ajouter des objets supplémentaires et de le maintenir étroitement couplé au processus d'authentification. –

+0

Seriez-vous prêt à privde du code ou plus de détails sur votre solution? – Czar

0

Je crois que cela dépend fortement de la façon dont vous utilisez l'ID utilisateur. Par exemple: si vous avez besoin de l'ID utilisateur au plus profond de votre couche de service métier et que la couche serveur d'entreprise est implémentée pour ne rien savoir des applications Web (Session, ...) jusqu'à maintenant, il serait sage de ne pas utiliser un HttpSession, pour le garder "web stuff free".

BTW: Une troisième approche que vous pouvez prendre en compte consiste à utiliser un bean de portée de session.

+0

Je veux accéder à l'objet userID dans le contrôleur, à partir de là je passerai comme un paramètre aux services. Le SecurityContextHolder semblait logique pour le garder couplé avec le mécanisme d'authentification, mais il n'y a pas de moyen facile de faire cela que j'ai vu. La session n'était pas géniale car je devais alors écrire du code pour mettre à jour la session lors de la connexion/déconnexion. Je me demandais simplement s'il existait une autre approche commune que les gens utilisent. Beaucoup de mes méthodes de service ont besoin de cela comme clé pour rechercher des données dans la base de données pour un utilisateur donné. –

+0

Session Scope Bean? Comment cela ressemblerait-il/travail? – Czar

+0

@Czar: '@Scope (valeur = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)' - http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory- scopes-other – Ralph

1

Je ne crois pas que les détails d'authentification sont créés pour chaque demande. Je crois qu'ils sont créés une fois par authentification.