Ho caricato i ruoli dal database per l'utente corrente. E posso accedere al ruolo utente con espressione di sicurezza primaverile in jsp, e posso nascondere le opzioni e gli URL che non sono autorizzati con hasRole. Ora volevo averlo nel servlet e visualizzarlo nei log (o memorizzare nella sessione dell'oggetto utente). Come possiamo ottenerlo?come ottenere i ruoli utente correnti da spring security 3.1
risposta
si può provare qualcosa di simile:
Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Hai la raccolta dei ruoli nelle autorità variabili.
Aggiornamento: fisso typo di GrantedAuthority generico
Hai provato a chiamare getUserPrincipal() da HttpServletRequest?
Grazie per la risposta, non ho provato, ma ho implementato ciò che Dani detto, ha funzionato per me. – Bhas
Abbastanza giusto. Ecco una breve nota: l'approccio di Dani ha l'inconveniente di accoppiare il codice con l'implementazione della sicurezza Spring mentre getUserPricipal() è una chiamata standard nelle specifiche del servlet e dovrebbe funzionare con qualsiasi provider. – maximdim
Con getUserPrincipal() si ottiene solo il nome del richiedente. Penso che la domanda sia come ottenere i ruoli assegnati a quell'utente, quindi credo che in getUserPrincipal() non funzionerà anche in quel modo. – Jay
Per completare entrambe le risposte ...
Ecco un'implementazione Spring
sicurezza getUserPrincipal
, in modo da poter vedere che la realtà ci getUserPrincipal
SecurityContextHolder
public Principal getUserPrincipal() {
Authentication auth = getAuthentication();
if ((auth == null) || (auth.getPrincipal() == null)) {
return null;
}
return auth;
}
//And the getAuthentication
private Authentication getAuthentication() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!trustResolver.isAnonymous(auth)) {
return auth;
}
return null;
}
Se sviluppi su Java 8, diventa più semplice.
Per ottenere tutti i ruoli utente:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Set<String> roles = authentication.getAuthorities().stream()
.map(r -> r.getAuthority()).collect(Collectors.toSet());
per verificare se l'utente ha un ruolo particolare, ad esempio ROLE_USER:.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
boolean hasUserRole = authentication.getAuthorities().stream()
.anyMatch(r -> r.getAuthority().equals("ROLE_USER"));
def springSecurityService
def ruoli = springSecurityService.getAuthentication() getAuthorities()
Si prega di provare a fornire una risposta più ampia e formattata. Puoi controllare [Come scrivere una buona risposta?] (Https://stackoverflow.com/help/how-to-answer). –
- 1. Spring Security 3.1
- 2. Spring Security 3.1 Run-As
- 3. Java: Spring security 3 Gerarchia dei ruoli
- 4. Come posso verificare Spring Security per l'autenticazione dell'utente e ottenere ruoli da Flex?
- 5. Spring Security 3.1 utilizzando Active Directory
- 6. Spring Security: autenticazione utente manualmente
- 7. Come spostare nome utente/password da spring-security-context.xml?
- 8. Come utilizzare ruoli/autorità personalizzati in Spring Security?
- 9. Spring-Security con X509?
- 10. Sono consentiti più ruoli nell'annotazione @Secured con Spring Security
- 11. Come ottenere il ruolo per l'utente corrente con Spring Security
- 12. Come configurare correttamente il tag http in Spring Security 3.1?
- 13. Mock Grails Spring Security Utente registrato
- 14. UserDetails getPassword restituisce null in spring security 3.1. Come ottenere la password dell'utente attualmente connesso?
- 15. Impostazione dei ruoli utente in base a un tipo di proprietà in Spring Security
- 16. spring security 3.1. autenticazione personalizzata-failure-url con parametri url
- 17. Come ottenere i dettagli di riproduzione correnti da MediaPlayer
- 18. Invalidate spring security session
- 19. Spring Boot + Spring Security + Hierarchical Roles
- 20. Ulteriori informazioni da parte dell'utente - Spring Security
- 21. Richiamare la password dell'utente corrente da spring security
- 22. Come abilitare la registrazione per Spring Security?
- 23. Spring 3 Security j_spring_security_check
- 24. Spring Security: setUserPrincipal manualmente
- 25. Spring Security @AuthenticationPrincipal
- 26. AuthenticationSuccessHandler esempio per Spring Security 3
- 27. Come impostare manualmente un utente autenticato in Spring Security/SpringMVC
- 28. Spring Session e Spring Security
- 29. Spring-Security: il nome utente viene inviato vuoto per l'accesso dopo l'aggiornamento a Spring-Security 4.1
- 30. Come modificare il nome di accesso per l'utente corrente con Spring Security 3.1?
Grazie Dani ha funzionato per me. – Bhas
siete i benvenuti;) – Dani
dovreste usare l'interfaccia di grantedauthority in questo elenco poiché l'implementazione può differire tra i provider di autorizzazione – Laures