2012-07-18 5 views
9

Nella nostra applicazione abbiamo previsto di utilizzare il meccanismo RoleVoter ma vorremmo rimuovere il prefisso ROLE_ come la sicurezza che stiamo attuando è più compito basato di ruolo basato.Perché il RoleVoter di Spring Security ha bisogno di un prefisso?

Tecnicamente, non c'è alcun problema per l'implementazione ma ho trovato nella documentazione che using the RoleVoter with an empty prefix should be discouraged.

Mi chiedo perché?

AFAICS, l'unico problema è che, senza il prefisso, il RoleVoter sarà partecipare alle decisioni che non è destinato a (come ad esempio il IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, ...) e la forza restituisce un accesso negato invece di un abstain .

Potrebbe confermare che questo è l'unico problema con un prefisso vuoto?

Grazie in anticipo M.

risposta

13

Sì. Se si utilizzano elettori multipli o un elettore personalizzato, è necessario conoscere in qualche modo quali attributi devono essere consumati. Ad esempio, se si dispone di una risorsa ROLE_USER,DAY_MONDAY con gli attributi ROLE_USER,DAY_MONDAY, è possibile votare per consentire l'accesso perché l'utente ha il ruolo "Utente", ma l'DayOfTheWeekVoter potrebbe negare l'accesso perché non è un lunedì.

Se non si configura RoleVoter con un prefisso, verificherebbe se l'utente ha l'autorizzazione denominata "DAY_MONDAY" a loro assegnata e quindi questo scenario non funzionerà.

Se si è interessati solo ai ruoli, è possibile fare a meno di un prefisso oppure è possibile utilizzare espressioni (come hasRole('user')) che non utilizzano uno RoleVoter.

+1

Ciao Luke, ho appena aggiornato Spring Boot dalla 1.2.2 alla 1.3.2 e questo ha iniziato a frenare per me. I miei controller hanno @PreAuthorize ("hasRole ('Edit')") e ora sta iniziando a controllare il prefisso ROLE_. Sembra che la tua spiegazione di hasRole() sia cambiata da quando hai postato questa risposta perché sta passando attraverso RoleVoter. Ho provato a trovare i modi per impostare il prefisso "" vuoto ma nessuno di loro funziona ... Puoi consigliare un altro modo per farlo in Spring Boot 1.3.2? – szxnyc

+2

L'ho cambiato in haauthority e ha funzionato. – szxnyc

Problemi correlati