Hace poco pasé del plugin JSecurity a Spring Security. ¿Cómo obtengo el usuario autenticado desde mis controladores?Grails y Spring Security: ¿Cómo obtengo el usuario autenticado dentro de un controlador?
Respuesta
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()
.....
.....
}
}
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.
Excelente información, gracias por la sugerencia. –
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! –
Ahora el método getPrincipalInfo se llama getAuthenticateduser, ¡pero gracias por el buen consejo! – lucke84
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
…
}
}
Hoy en día, creo que la manera de hacerlo es:
def user = getAuthenticatedUser()
Usted puede obtener del usuario actual, de esta manera también
class AnyController {
def springSecurityService
def someAction = {
def user = User.get(springSecurityService.principal.id)
}
}
Usar este código:
if (springSecurityService.isLoggedIn()){
println "Logged In"
}
- 1. Grails Spring Security Testing
- 2. Mock Grails Spring Security Usuario registrado
- 3. Grails Spring Security plugin - modificar las autorizaciones de usuario registradas
- 4. Grails Spring Security Core mensaje de cierre de sesión
- 5. Spring security openId support y user deauthentication
- 6. Spring Security UI and grails 2.0
- 7. Grails Spring Security utiliza el correo electrónico para iniciar sesión
- 8. ¿Cómo puedo usar Spring Security con un clúster con replicación de sesión para conmutar por error a un usuario autenticado?
- 9. Spring Security: Usuario de autenticación manualmente
- 10. Obtenga más información del usuario - Spring Security
- 11. AZURE ACS - Windows Live ID - ¿Cómo obtengo el correo electrónico y el nombre del usuario autenticado?
- 12. Grails security
- 13. Spring Security: setUserPrincipal manualmente
- 14. Grails, Spring Security & Siteminder - problemas con los recursos o userDetails
- 15. URL a veces añadida con jsessionid Grails/Spring Security
- 16. Cómo implementar Openid connect y Spring Security
- 17. Spring Security, Spring MVC y Sesiones de inicio de sesión
- 18. Spring Security (Acegi) y grupos de usuarios (frente a Roles)
- 19. Spring security accessing principal
- 20. Spring Security y CAS Integration
- 21. burying authentication spring security
- 22. ¿Cómo administrar un objeto de usuario personalizado en sesión cuando Spring Security autentica al usuario?
- 23. Uso programático de Spring Security
- 24. Grails: núcleo de seguridad SSL y Spring
- 25. ¿Cómo funciona <global-method-security> en mi controlador por Spring-Security?
- 26. ¿Cómo manejar la sesión expirada utilizando spring-security y jQuery?
- 27. ¿Cómo funcionan las sesiones de Spring Security?
- 28. Recuperar la contraseña del usuario actual de spring-security
- 29. Spring Security Child Thread Context
- 30. spring-security cómo ACL otorga permisos
¡Gran ... gracias! Solo un error tipográfico en el código anterior. Debería ser def username = user? .getUsername() –
Gracias por captar eso, lo corrigí. –
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