Domanda

Voglio accedere al modello completo degli utenti con i loro ruoli nella mia SOAP app. Per esempio, potrei voler conoscere il ruolo di un utente chiamato "Fred".

Come si arriva in una sorta di registro globale JAAS e fare (pseudocodice) globalRegistry.getUser ( "Fred"). GetPrincipals () ? (Si noti che in JAAS, un ruolo è rappresentato da un principale ).

I sapere come ottenere il principale del Soggetto dalla LoginContext , ma che ha due problemi.

  1. E 'solo al momento del login, e io preferisco non codificare il Registro di sistema di cui sopra e memorizzare il Soggetto e principale me oggetti, in quanto sono già memorizzati dal appserver.
  2. Preferibilmente, voglio essere in grado di accedere a queste informazioni anche quando Fred non è l'utente corrente.

Sto usando Jetty, ma presumo che questi comportamenti sono standard per JAAS.

È stato utile?

Soluzione

Usiamo una variabile ThreadLocal fare riferimento all'utente corrente come è stato autenticato al entrypoint sistema (un servlet o ejb nel nostro caso). Questo consente l'accesso 'globale' per l'utente corrente. Questo non è direttamente legato a JAAS o qualsiasi altro protocollo di sicurezza, ma può essere inizializzato da loro.

EDIT:. Il ritorno dalla ThreadLocal è il Soggetto per l'utente corrente

Accesso altri utenti sarebbero in genere essere fatto tramite un certo tipo di modulo di amministrazione.

Altri suggerimenti

Un modello che ho visto è:

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

Essenzialmente, questo trova il soggetto attualmente associato al thread corrente, e chiede suoi committenti.

Un esempio di utilizzo di questo è in s 'Apache Jackrabbit RepositoryImpl . E 'nel metodo extendAuthentication, il cui compito è quello di determinare quali sono i diritti Jackrabbit il thread corrente ha quando si crea una nuova sessione (credo).

Tuttavia, Vorrei sottolineare che questo potrebbe non necessariamente effettivamente funzionare, almeno in contesti J2EE. Sto usando questo codice sotto JBoss AS7, e non trova un soggetto. Che potrebbe essere solo un bug, però.

A me, sembra appsever questo mizes di utenti, gruppi ecc, con ruoli applicazione J2EE.

  • Come le autorizzazioni di un utente certaion è un compito di gestione e di solito deve essere realizzato utilizzando le API specifiche per appserver.
  • modello di programmazione JAAS lavora su più alto livello di abstratcion. Esso fornisce solo le informazioni se un utente è in un ruolo J2EE (definito all'interno dell'applicazione)

Credo che JAAS è stato progettato per non realmente permettere che ciò che si sta cercando di fare. So che nelle applicazioni che ho costruito che avevo bisogno che tipo di funzionalità ho dovuto eludere JAAS e programma direttamente a qualsiasi repository di identità reale era, sia esso LDAP, ActiveDirectory o qualsiasi altra cosa.

In un uso EJB

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

E provare con context.lookup("java:comp/EJBContext") in qualsiasi momento.


Questo codice è per la famiglia di server JBoss, per gli altri guardano nella loro JNDI per trovarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top