Frage

Ich möchte das vollständige Modell der Benutzer für den Zugriff auf mit ihren Rollen in meinem SOAP-App. Zum Beispiel könnte ich mag die Rolle eines Benutzers kennen als „Fred“.

Wie kann ich in eine Art globalen JAAS Registers erreichen und tun (Pseudo-Code) globalRegistry.getUser ( "Fred"). GetPrincipals () ? (Beachten Sie, dass in JAAS, eine Rolle von einem Haupt dargestellt wird ).

Ich weiß, wie das Haupt bekommt des Betreff von der Logincontext , aber das hat zwei Probleme.

  1. Es ist nur im Augenblick der Anmeldung, und ich würde es vorziehen, nicht die oben genannten Registrierungs codieren und speichern Sie die Betreff und Haupt Objekte selbst, als sie ohnehin schon sind durch die appserver gespeichert.
  2. Vorzugsweise möchte ich auch auf diese Informationen zugreifen können, wenn Fred nicht der aktuelle Benutzer ist.

Ich bin mit Jetty, aber ich nehme an, dass diese Verhaltensweisen zu JAAS Standard sind.

War es hilfreich?

Lösung

Wir verwenden eine Thread Variable den aktuellen Benutzer verweisen wie auf dem System Einstiegspunkt (ein Servlet oder ejb in unserem Fall) authentifiziert. Dies ermöglicht es, globale 'Zugriff auf den aktuellen Benutzer. Dies ist nicht direkt gebunden an JAAS oder anderem Sicherheitsprotokoll, kann aber von ihnen initialisiert werden.

EDIT:. Die Rückkehr aus dem Thread ist das Thema für den aktuellen Benutzer

Zugriff auf anderen Benutzer würden in der Regel über eine Art von Admin-Modul durchgeführt werden.

Andere Tipps

Ein Muster ich gesehen habe ist:

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

Im Wesentlichen findet diese das Thema zur Zeit mit dem aktuellen Thread zugeordnet ist, und bittet um seine Auftraggeber.

Ein Beispiel für die Verwendung dieser ist in Apache Jackrabbit 's RepositoryImpl . Es ist in der extendAuthentication Methode, deren Aufgabe es ist zu bestimmen, welche Rechte Hase der aktuelle Thread hat, wenn eine neue Sitzung zu schaffen (glaube ich).

Allerdings soll ich beachten Sie, dass dies nicht notwendigerweise tatsächlich funktioniert, zumindest in J2EE Kontexten. Ich verwende diesen Code unter JBoss AS7, und es ist kein Thema. Das könnte nur ein Fehler, aber sein.

Für mich scheint es diesen Benutzer des appsever miert, Gruppen usw. mit J2EE-Anwendungsrollen.

  • Berechtigungen eines Benutzers certaion zu erhalten ist eine Verwaltungsaufgabe und in der Regel durchgeführt werden muss appserver spezifische APIs.
  • JAAS Programmiermodell arbeitet auf höhere abstratcion. Es bietet nur die Information, ob ein Benutzer in einer J2EE-Rolle ist (innerhalb der Anwendung definiert)

Ich glaube, dass JAAS entworfen wurde, nicht wirklich zu lassen, was Sie zu tun versuchen. Ich weiß, in dem Apps, die ich gebaut habe, dass ich diese Art von Funktionalität benötigt musste ich neben Schritt JAAS und Programm direkt zu was auch immer der tatsächlichen Identität Repository war, sei es LDAP, Activedirectory oder was auch immer.

In einer EJB Verwendung

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

Und versuchen mit context.lookup("java:comp/EJBContext") an einer beliebigen Stelle.


Dieser Code ist für JBoss-Server-Familie, für die andere in ihrem JNDI suchen, es zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top