Question

Je veux accéder au modèle complet des utilisateurs avec leurs rôles dans mon application SOAP. Par exemple, je pourrais avoir besoin de connaître le rôle d'un utilisateur appelé « Fred. »

Comment puis-je mettre la main dans une sorte de registre mondial JAA et faire (pseudocode) globalRegistry.getUser ( "Fred"). GetPrincipals () ? (Notez que dans JAAS, un rôle est représenté par un principal ).

Je sais comment obtenir le principal de Sujet de la LoginContext , mais qui a deux problèmes.

  1. Il est seulement au moment de la connexion, et je préfère ne pas coder le registre mentionné ci-dessus et stocker les Sujet et principal moi-même des objets, car ils sont déjà stockée par le serveur d'applications.
  2. De préférence, je veux être en mesure d'accéder à cette information même si Fred n'est pas l'utilisateur actuel.

J'utilise la jetée, mais je présume que ces comportements sont standard à JAAS.

Était-ce utile?

La solution

Nous utilisons une variable ThreadLocal pour faire référence à l'utilisateur actuel comme cela a été authentifié au point d'entrée du système (un servlet ou ejb dans notre cas). Cela permet un accès « global » à l'utilisateur actuel. Ce n'est pas directement liée à JAAS ou tout autre protocole de sécurité, mais il peut être initialisé d'eux.

EDIT:. Le retour de la ThreadLocal est le sujet de l'utilisateur actuel

Accès à d'autres utilisateurs seraient généralement se faire via un certain type de module d'administration.

Autres conseils

Un motif i ai vu est:

AccessControlContext acc = AccessController.getContext();
Subject subject = Subject.getSubject(acc);
Set<Principal> principals = subject.getPrincipals();

Pour l'essentiel, ce trouve le sujet actuellement associé au thread en cours, et demande à ses dirigeants.

Un exemple de l'utilisation de c'est de Apache Jackrabbit RepositoryImpl . Il est dans la méthode extendAuthentication, dont le travail est de déterminer quels sont les droits Jackrabbit le thread courant a lors de la création d'une nouvelle session (je crois).

Cependant, je dois souligner que cela ne fonctionne pas nécessairement en fait, au moins dans un contexte J2EE. J'utilise ce code sous JBoss AS 7, et il ne trouve pas un sujet. Cela pourrait juste être un bug, cependant.

Pour moi, il semble que ce utilisateurs de appsever mizes, groupes etc. avec des rôles d'application J2EE.

  • Obtenir les autorisations d'un utilisateur certaion est une tâche d'administration et doit généralement être accompli en utilisant des API spécifiques à appserver.
  • modèle de programmation JAAS fonctionne sur le niveau plus élevé de abstratcion. Il ne fournit que les informations si un utilisateur est dans un rôle J2EE (défini dans l'application)

Je crois que JAAS a été conçu pour permettre pas vraiment ce que vous essayez de faire. Je sais que dans les applications que j'ai CONSTRUIT que je avais besoin de ce genre de fonctionnalités que j'avais à l'autre étape JAA et programme directement quel que soit le référentiel d'identité réelle était, que ce soit LDAP, ActiveDirectory ou autre.

Dans une utilisation EJB

@Resource(mappedName = "java:comp/EJBContext")
protected SessionContext sessionContext;

Et essayez avec context.lookup("java:comp/EJBContext") à tout moment.


Ce code est pour la famille du serveur JBoss, pour d'autres regardent dans leur JNDI pour le trouver.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top