Je suis récemment passé du plug-in JSecurity à Spring Security. Comment puis-je obtenir l'utilisateur authentifié à partir de mes contrôleurs?Grails et Spring Security: Comment obtenir l'utilisateur authentifié à partir d'un contrôleur?
Répondre
J'utilise 0.5.1 et les œuvres suivantes pour moi:
class EventController {
def authenticateService
def list = {
def user = authenticateService.principal()
def username = user?.getUsername()
.....
.....
}
}
Il est pas documenté, mais dans le fichier d'installation du plug-in, il existe 3 méthodes qu'il ajoute à chaque contrôleur afin que vous n'ont pas fait d'injecter la 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'
}
}
Cela signifie que vous pouvez simplement appeler
principalInfo
Pour obtenir l'objet principal. Il a également "isUserLogin" pour voir si l'utilisateur est connecté et "authUserDomain" pour obtenir l'instance de classe de domaine réelle (la personne/utilisateur) associée au principal de l'utilisateur connecté.
Excellente info, merci pour le conseil. –
J'ai passé une heure et demie à me taper la tête contre le clavier en essayant de faire fonctionner la prise Acegi avec le modèle de téléchargement de fichier montré sur http://www.packtpub.com/article/file-sharing-in-grails jusqu'à ce que je trouve ce. Merci! –
Maintenant, la méthode getPrincipalInfo est appelée getAuthenticateduser, mais merci pour le bon conseil! – lucke84
Le code suivant est de la Spring Security Core Plugin (Version: 1.1.2) - Reference Documentation - Section 6.2
grails.plugins.springsecurity.SpringSecurityService fournit des fonctions utilitaires de sécurité. Il est un service régulier Grails, vous utilisez donc l'injection de dépendance pour l'injecter dans un contrôleur, le service, taglib, etc.:
class SomeController {
def springSecurityService
def someAction = {
def user = springSecurityService.currentUser
…
}
}
De nos jours, je pense que la façon de le faire est:
def user = getAuthenticatedUser()
Vous pouvez obtenir l'utilisateur actuel de cette façon aussi
class AnyController {
def springSecurityService
def someAction = {
def user = User.get(springSecurityService.principal.id)
}
}
Utilisez ce code:
if (springSecurityService.isLoggedIn()){
println "Logged In"
}
- 1. Spring Security UserDetails Meilleures pratiques
- 2. Test Grails Spring Integration
- 3. Spring Security Child Thread Contexte
- 4. Comment obtenir User.Identity.Name à partir d'un contrôleur?
- 5. Spring Security: retours d'authentification null
- 6. Comment remplacer le plug-in Grails Spring Security pour mon système de sécurité LDAP uniquement?
- 7. Utilisation du plug-in Spring Security avec Grails sans le modèle de domaine
- 8. Équilibrage de charge, Spring Security, ConcurrentSessionFilter
- 9. Puis-je faire ceci dans Grails 2: Sécuriser les onglets individuels avec Spring Security
- 10. Spring WS-Security visible dans WSDL
- 11. Comment obtenir html retourné à partir d'ActionResult dans le contrôleur
- 12. Comment accéder aux propriétés du domaine à partir d'un contrôleur dans Grails?
- 13. Création d'une authentification personnalisée avec Acegi/Spring Security
- 14. Comment intégrer le langage Scala avec Spring Security
- 15. Le plug-in Acegi/Spring Security Grails ne voit pas les modifications apportées à une instance utilisateur
- 16. Grails, obtention d'InputStream à partir du contrôleur (ou même de Servlet)
- 17. Comment utiliser les rôles/autorités personnalisés dans Spring Security?
- 18. Comment référencer un champs de classe de domaine Grails depuis l'extérieur du contrôleur Grails et afficher?
- 19. Héritage et sous-flux avec Spring WebFlow dans grails
- 20. Définition des variables contrôleur accessibles à partir de filtres à Grails
- 21. Comment créer un "clone" de contrôleur dans Grails?
- 22. Comment valider à partir du contrôleur
- 23. Comment vous authentifier auprès d'un serveur Active Directory à l'aide de Spring Security?
- 24. Spring Security ne fonctionne pas sous Windows 7
- 25. Spring-WS: Comment accéder à MessageContext à partir de PayloadEndpoint
- 26. Spring La sécurité est appelée à partir de différentes sources
- 27. Ruby et WS-Security
- 28. NHIbernate et Security/Business Layer
- 29. Spring MVC et Prototype JavaScript
- 30. Obtenir l'appelant à un proxy AOP Spring
Grand- merci! Juste une faute de frappe dans votre code ci-dessus. Il devrait être def username = user? .getUsername() –
Merci d'avoir attrapé cela, je l'ai corrigé. –
Veuillez noter qu'il y a eu quelques changements avec la nouvelle version de Spring Security. [Voir ici le code d'exemple de Spring Security version 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