Il y a deux gagnants:
1- Nouvelle fonctionnalité appelée ClientContext qui fera partie de Java 7: Java 7 n'est pas encore terminée, et ClientContext va casser la compatibilité ascendante.
2- Attachement de Shiro à AccessControlContext: C'est la solution que je choisis, le mécanisme de recherche par défaut de Shiro ne tient pas compte du contexte de contrôle d'accès de Java. J'ai fait un test il y a longtemps pour tester ça mais ça n'a pas marché. Maintenant, je sais pourquoi: par défaut, SecurityUtils.getSubject() appelle attache le Sujet récupéré au thread appelant en cours, mais cette approche est inutile puisque les threads peuvent être partagés entre les clients. Mais AccessControlContext est beaucoup plus puissant, et il semble que JMX joue bien avec; votre contexte de contrôle d'accès (qui est authentifié lors de la connexion à JMXAuthenticator) est accessible à partir d'un MBeanServerForwarder ou même à l'intérieur de votre MBean. J'ai testé cela avec plusieurs clients qui récupèrent leur principal, cela fonctionne simplement.
Éditer: Comment attacher Shiro sujet à l'actuel AccessControlContext?
1- Créez un sujet Shiro non attaché à l'aide de la classe de générateur Subject.Builder.
2- authentifier l'utilisateur (en utilisant la méthode de connexion du sujet Shiro, etc.)
3- Créer un sujet mutable JAAS avec un singleton contenant le sujet Shiro que les pouvoirs privés.
4- Fournir le sujet JAAS au système de sécurité Java sous-jacente (par exemple, retour le sujet dans une méthode d'authentification de JMXAuthenticator)
Une classe d'aide peut être créé pour simplifier cette approche. Lorsque vous avez besoin d'une action à effectuer pour le compte du sujet Shiro (pour autorisation, etc.), récupérez-la à partir de AccessControlContext et utilisez l'une des méthodes Subject.execute .... Cela peut être effectué dans un proxy ou un redirecteur (comme MBeanServerForwarder).
@Farrukh Najmi Ajout d'une description détaillée de la façon dont je fais cela –