Sto sviluppando un'applicazione Java EE 6 utilizzando Glassfish 3.1, B06. Per proteggere la mia app, sto usando un JDBCRealm e la sicurezza programmatica. Funziona bene per controllare nome utente e password. Ma quando si tratta di dichiarare ruoli di sicurezza, ho un problema:Aggiungere ruoli di sicurezza Java EE in modo dinamico senza utilizzare il descrittore di distribuzione
Per utilizzare i ruoli di sicurezza in Java EE 6, devo dichiarare quei ruoli sia nel descrittore di distribuzione EJB che nel descrittore di distribuzione specifico di Glassfish per collegarli ruoli (come spiegato nello Java EE 6-tutorial) Solo io posso utilizzare il metodo isCallerInRole (String roleRef) all'interno di un EJB per verificare le autorizzazioni.
Non è consigliabile per la mia applicazione, poiché desidero che sia possibile aggiungere ruoli di sicurezza sia dinamicamente che a livello di codice, senza dover scrivere file XML (e, ad esempio, consentire di definire i nomi dei ruoli in un database).
Ho appena debug attraverso il codice GF3-source e ha visto la realizzazione di isCallerInRole in com.sun.ejb.containers.EjbContextImpl. C'è il contenitore ottiene i ruoli fuori del descrittore di EJB:
public boolean isCallerInRole(String roleRef) {
(...)
EjbDescriptor ejbd = container.getEjbDescriptor();
RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
(...)
}
mi sono guardato intorno e ho scoperto che se potessi in qualche modo ottenere il descrittore di EJB all'interno della mia applicazione, ho potuto aggiungere un ruolo come questo:
EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
Qualcuno ha fatto qualcosa del genere, o ci ha pensato? È possibile utilizzare il descrittore di distribuzione Ejb all'interno della mia applicazione? O ci sono approcci migliori?
P.S. o dovrei usare MBeans per aggiungere ruoli? Trovato un post abbastanza correlato here.
Per inciso, vorrei incoraggiarvi a passare a una versione più recente di GlassFish Server 3.1. Il team ha recentemente rilasciato la build 22. – vkraemer
Grazie. Sfortunatamente, abbiamo alcune librerie che si rompono a versioni di Glassfish più alte, quindi dobbiamo restare con 06 fino a quando alcuni bug in queste librerie sono corretti – ifischer