2009-04-21 8 views

risposta

10

sto usando 0.5.1 e le seguenti opere per me:

class EventController { 
    def authenticateService 

    def list = { 
    def user = authenticateService.principal() 
    def username = user?.getUsername() 
    ..... 
    ..... 
    } 
} 
+0

Grazie mille! Solo un errore di battitura nel tuo codice precedente. Dovrebbe essere def username = user? .getUsername() –

+0

Grazie per averlo capito, l'ho corretto. –

+3

Si prega di notare che ci sono stati alcuni cambiamenti con la nuova versione di Spring Security. [Vedi qui per esempio il codice per Spring Security versione 1.1.2] (http://stackoverflow.com/questions/775053/grails-and-spring-security-how-do-i-get-the-authenticated-user-from -within-a-con/6270545 # 6270545) – Chris

15

Al momento non è documentato, ma nel file di installazione plug-in, ci sono 3 metodi che si aggiunge a tutti i controller in modo che si realtà non c'è bisogno di iniettare l'AuthenticationService:

private void addControllerMethods(MetaClass mc) { 
    mc.getAuthUserDomain = { 
     def principal = SCH.context?.authentication?.principal 
     if (principal != null && principal != 'anonymousUser') { 
      return principal?.domainClass 
     } 

     return null 
    } 

    mc.getPrincipalInfo = { 
     return SCH.context?.authentication?.principal 
    } 

    mc.isUserLogon = { 
     def principal = SCH.context?.authentication?.principal 
     return principal != null && principal != 'anonymousUser' 
    } 
} 

Questo significa che si può chiamare

principalInfo 

Per ottenere l'oggetto principale. Ha anche "isUserLogin" per vedere se l'utente è loggato e "authUserDomain" per ottenere l'effettiva istanza della classe di dominio (la Persona/Utente) associata al principale dell'utente connesso.

+0

Grandi informazioni, grazie per il suggerimento. –

+0

Ho passato un'ora e mezza a sbattere la testa contro la tastiera cercando di far funzionare la spina Acegi con il pattern di caricamento file mostrato in http://www.packtpub.com/article/file-sharing-in-grails finché non ho trovato Questo. Grazie! –

+4

Ora il metodo getPrincipalInfo si chiama getAuthenticateduser, ma grazie per il buon consiglio! – lucke84

13

Il seguente codice è dal grails.plugins.springsecurity.SpringSecurityService Spring Security Core Plugin (Version: 1.1.2) - Reference Documentation - Section 6.2

fornisce funzioni di utilità di sicurezza. Si tratta di un servizio regolare Grails, in modo da utilizzare l'iniezione di dipendenza per iniettare in un controller, il servizio, taglib, e così via:

class SomeController { 
    def springSecurityService 
    def someAction = { 
     def user = springSecurityService.currentUser 
     … 
    } 
} 
5

Al giorno d'oggi, penso che il modo per farlo è:

def user = getAuthenticatedUser() 
2

È possibile ottenere l'utente corrente in questo modo anche

class AnyController { 
    def springSecurityService 
    def someAction = { 
    def user = User.get(springSecurityService.principal.id) 

    } 
} 
0

di questo codice:

if (springSecurityService.isLoggedIn()){ 
     println "Logged In" 

    } 
Problemi correlati