2010-02-09 3 views
11

Desidero gestire utenti e ruoli in un'applicazione dedicata. Ad esempio, un utente di questa applicazione ("clienteX boss") può creare un nuovo ruolo "impiegato clienteX". Se un dipendente accede al server di applicazioni Java EE (GlassFish 3), deve ottenere il ruolo di "impiegato clienteX".ruoli dinamici su un server Java EE

Sembra semplice, ma non è supportato da Java EE, poiché i gruppi vengono mappati ai ruoli all'avvio e i ruoli all'interno dell'applicazione sono statici.

Qual è il modo migliore per gestire i ruoli utente in fase di esecuzione in un ambiente Java EE (6)?

+2

Ho creato https://java.net/jira/browse/JAVAEE_SPEC-20 in supporto (tra gli altri) di questo caso d'uso. Se tu o qualcun altro è ancora infastidito dalla mancanza di dinamismo nei ruoli Java EE, vota per favore o lascia un commento. –

risposta

11

La sicurezza dichiarativa in Java EE non è adatta per tali requisiti. Il problema della sicurezza può essere divisa in due:

  • autenticazione
  • autorizzazione

avevo requisito analogo volta. Abbiamo usato l'autenticazione integrata per avere il set principale e invocato poi i meccanismi di login Java EE predefiniti. Ma alla fine abbiamo gestito la parte di autorizzazione manualmente a livello applicativo.

Infatti, anche i ruoli che saranno caricati e associati principale (isUserInRole per il web e isCallerInRole per il bean) devono essere specificati in web.xml o ejb.xml che non fornisce sufficiente flessibilità. Dovevamo quindi caricare manualmente i ruoli (in base al principale) da LDAP o ActiveDirectory. Abbiamo quindi utilizzato gli intercettori EJB3 e il filtro Servlet per eseguire autonomamente i controlli di sicurezza.

Vorrei tuttavia suggerire fortemente di attenersi a un controllo di accesso basato sui ruoli (RBAC) e non implementare qualcosa di più di fantasia. Esistono diverse strutture che possono aiutare a gestire l'RBAC prodotto in casa.

Abbiamo anche dato un'occhiata a JSecurity e Acegi Security e sembravano interessanti.

+0

Grazie per la tua risposta, soprattutto per il suggerimento che anche i ruoli impostati dinamicamente devono essere dichiarati staticamente in web.xml o ejb.xml! Quello sarebbe stato il prossimo trabocchetto per me. Controllerò JSecurity a Spring Security (il successore di Acegi) http://static.springsource.org/spring-security/site/index.html. – deamon

+1

JSecurity è ora chiamato "Shiro". http://cwiki.apache.org/confluence/display/SHIRO/Index – deamon

+0

Sì, i ruoli dichiarati con '' o '@ DeclaredRoles' sono in realtà nomi simbolici che devono essere associati al ruolo nella directory esterna (es. LDAP) usando ''. Se la mappatura è 1-a-1, Glassfish ha un'opzione "default default to role mapping", ma questa è solo metà della soluzione e devi comunque elencare il ruolo da qualche parte. – ewernli