2015-06-24 5 views
5

Sono nuovo alla sicurezza di primavera. Come interpreto questo?Come interpretare hasPermission nella sicurezza di primavera?

@PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI')") 
    OpetussuunnitelmaDto addOpetussuunnitelma(OpetussuunnitelmaDto opetussuunnitelmaDto); 

Quale metodo viene chiamato dall'utilità di valutazione? Penso che quello con tre parametri verrebbe chiamato in questo caso. Sta controllando se l'utente corrente ha l'autorizzazione "LUONTI" sulla destinazione di tipo - "opetussuunnitelma". Ho ragione? Non possiamo semplicemente non includere "null" e passare solo due parametri. Ho letto che il primo argomento (l'oggetto di autenticazione) non è fornito.

+public class PermissionEvaluator implements org.springframework.security.access.PermissionEvaluator { 
+ 
+ @Override 
+ public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) { 
+  LOG.error(" *** ei toteutettu *** "); 
+  return true; 
+ } 
+ 
+ @Override 
+ public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) { 
+  LOG.error(" *** ei toteutettu *** "); 
+  return true; 
+ } 
+ 
+ private static final Logger LOG = LoggerFactory.getLogger(PermissionEvaluator.class); 
+} 

risposta

8

Quale metodo dal valutatore permesso otterrebbe chiamato?

public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) 

otterrebbe chiamato.

Ho letto che il primo argomento (l'oggetto di autenticazione) non è fornito.

Non è esplicitamente fornito nella tua annotazione, ma implicitamente fornito da Spring. La tua annotazione dovrebbe semplicemente leggere

@PreAuthorize("hasPermission(#opetussuunnitelmaDto, 'LUONTI')") 

Idealmente, vorrei verificare se sono addirittura autenticati prima di eseguire l'autorizzazione.

@PreAuthorize("isAuthenticated() and hasPermission(#opetussuunnitelmaDto, 'LUONTI')") 

aggiornamento al tuo commento

Fondamentalmente è possibile chiamare il PermissionEvaluator sia con:

hasPermission('#targetDomainObject', 'permission') // method1 
hasPermission('targetId', 'targetType', 'permission') // method2 

autenticazione viene sempre fornita entro la primavera. Nel tuo caso, si sta chiamando hasPermission seguente modo

hasPermission (null, 'opetussuunnitelma', 'LUONTI') ")

che sarebbe partita method2, ma passando un identificatore nullo non ha senso, ciò che un'entità hai intenzione di indirizzare il controllo di autorizzazione per? sulla base del metodo che si sta applicando il @PreAuthorize su,

OpetussuunnitelmaDto addOpetussuunnitelma (OpetussuunnitelmaDto opetussuunnitelmaDto);

può avere più senso chiamare method1 dal momento che sembrano avere qualcosa che assomiglia ad un oggetto di dominio di destinazione.

+0

Grazie. Potresti dirmi se l'uso di "null" serve a qualcosa qui? – Zack

+0

Quando aggiungo l'annotazione @PreAuthorize a un metodo nel controller, funziona come un incantesimo. Ma, non funziona con un metodo di servizio. Qualche ragione specifica? – Arun