2009-04-21 15 views

Respuesta

10

estoy usando 0.5.1 y las siguientes obras para mí:

class EventController { 
    def authenticateService 

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

¡Gran ... gracias! Solo un error tipográfico en el código anterior. Debería ser def username = user? .getUsername() –

+0

Gracias por captar eso, lo corrigí. –

+3

Tenga en cuenta que se han producido algunos cambios con la nueva versión de Spring Security. [Consulte aquí el código de ejemplo de Spring Security versión 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

No está documentada actualmente, pero en el archivo de instalación del complemento, hay 3 métodos que se suma a todos los controladores para que en realidad no tiene que inyectar el 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' 
    } 
} 

Esto significa que sólo se puede llamar

principalInfo 

Para obtener el objeto principal. También tiene "isUserLogin" para ver si el usuario está conectado y "authUserDomain" para obtener la instancia de la clase de dominio real (la Persona/Usuario) asociada con el principal del usuario conectado.

+0

Excelente información, gracias por la sugerencia. –

+0

Pasé una hora y media golpeando mi cabeza contra el teclado tratando de que Acegi se enchufara para funcionar con el patrón File Upload que se muestra en http://www.packtpub.com/article/file-sharing-in-grails hasta que encontré esta. ¡Gracias! –

+4

Ahora el método getPrincipalInfo se llama getAuthenticateduser, ¡pero gracias por el buen consejo! – lucke84

13

El siguiente código es de la grails.plugins.springsecurity.SpringSecurityService Spring Security Core Plugin (Version: 1.1.2) - Reference Documentation - Section 6.2

ofrece funciones de utilidad de seguridad. Es un servicio Griales regulares, por lo que utilizar la inyección de dependencias para inyectarlo en un controlador, el servicio, taglib, y así sucesivamente:

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

Hoy en día, creo que la manera de hacerlo es:

def user = getAuthenticatedUser() 
2

Usted puede obtener del usuario actual, de esta manera también

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

    } 
} 
0

Usar este código:

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

    } 
Cuestiones relacionadas