2012-01-19 13 views
6

Ho trovato un framework di sicurezza flessibile Apache Shiro. Ho implementato con successo l'autenticazione e l'autorizzazione usando Shiro.Controllo accessi a livello di istanza in Apache Shiro

Una delle caratteristiche interessanti del framework è la sicurezza basata sull'istanza. Ho appena copiato un esempio dal sito web Shiro.

Le seguenti autorizzazioni sono memorizzate nel database.

printer:query:lp7200 
printer:print:epsoncolor 

Il seguente codice verifica se per una determinata istanza di stampante, l'utente autenticato corrente dispone dell'autorizzazione o meno.

if (SecurityUtils.getSubject().isPermitted("printer:query:lp7200") { 
// Return the current jobs on printer lp7200 
} 

La mia domanda è "È così che le autorizzazioni vengono archiviate nel database?" Esiste un modo migliore per archiviare le autorizzazioni basate sull'istanza?

Per favore fatemi sapere.

Grazie

risposta

9

Come si memorizzano queste informazioni è interamente a voi. L'implementazione di Realm è responsabile per l'interrogazione su qualsiasi origine dati utilizzata e l'estrazione dei dati di autorizzazione nel formato che preferisci.

Alcune persone le memorizzano direttamente come stringhe (come quelle mostrate nell'esempio), altre persone le memorizzano in una tabella dedicata (ad esempio se si utilizza un RDBMS) (ad esempio permission_type, target, colonne di azioni). È possibile associare le entità di autorizzazione ai ruoli o direttamente agli utenti o ai gruppi che sono assegnati agli utenti, ecc., Tuttavia ha senso per la propria applicazione.

Le opzioni di archiviazione sono interamente a te. Si materializzano i dati, tuttavia si desidera garantire la funzione operativa Realm.isPermitted(...) come previsto.

Invece di implementare direttamente i Realm.isPermitted(...) metodi, molte persone trovano più conveniente alla sottoclasse l'astratto AuthorizingRealm di classe e l'override del metodo doGetAuthorizationInfo e tornare AuthorizationInfo istanze che supportano rappresentazioni autorizzazione.

In questo metodo, è possibile interrogare il datastore, tradurre i dati restituiti nelle istanze AuthorizationInfo e si sarà fatto (non dimenticare di abilitare la memorizzazione nella cache di autorizzazione - vedrete un grande vantaggio in termini di prestazioni).

override le RealmisPermitted metodi è necessaria solo se si desidera un controllo molto preciso su query, ecc

Problemi correlati