2009-04-21 10 views

Répondre

10

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() 
    ..... 
    ..... 
    } 
} 
+0

Grand- merci! Juste une faute de frappe dans votre code ci-dessus. Il devrait être def username = user? .getUsername() –

+0

Merci d'avoir attrapé cela, je l'ai corrigé. –

+3

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

15

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é.

+0

Excellente info, merci pour le conseil. –

+0

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! –

+4

Maintenant, la méthode getPrincipalInfo est appelée getAuthenticateduser, mais merci pour le bon conseil! – lucke84

13

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 
     … 
    } 
} 
5

De nos jours, je pense que la façon de le faire est:

def user = getAuthenticatedUser() 
2

Vous pouvez obtenir l'utilisateur actuel de cette façon aussi

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

    } 
} 
0

Utilisez ce code:

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

    } 
Questions connexes