2010-07-28 5 views
3

Je termine une implémentation de Spring Security dans Grails. C'est ma première implémentation sur Spring Security - auparavant, j'ai utilisé Acegi.Obtention du principal pendant l'authentification Grails Spring Security

Voici le problème que j'ai. Dans Acegi, j'ai pu récupérer l'utilisateur authentifié dans le rappel onInteractiveAuthenticationSuccessEvent() en accédant au SecurityContextHolder, en obtenant le principe de l'utilisateur, puis en obtenant l'utilisateur 'live' de la base de données. Dans Spring Security, le SecurityContextHolder ne semble pas être disponible - quand j'essaye d'y accéder, je reçois des plaintes de Grails de bas niveau à propos d'une telle méthode sur tel ou tel objet.

Alors, mes questions:

  • Comment puis-je accéder à SecurityContextHolder de onInteractiveAuthenticationSuccessEvent

  • Ou est-il une meilleure façon d'obtenir le principe authentifié?

Merci, Dan

Répondre

3

Vous devrez peut-être mettre à jour l'importation - il a changé de printemps de sécurité 2 à 3 - il est maintenant org.springframework.security.core.context.SecurityContextHolder mais les méthodes ont pas changé.

Mais il est plus propre à utiliser springSecurityService, qui est accessible à partir du rappel d'un événement en utilisant la variable appCtx:

onInteractiveAuthenticationSuccessEvent = { e, appCtx -> 
    def principal = appCtx.springSecurityService.principal 
    def user = User.get(principal.id) 
} 
+0

Merci Burt- apprécient les plusieurs réponses que vous avez fournies. Juste par curiosité, êtes-vous dans l'équipe de développement de Grails? Ou travailler en étroite collaboration avec eux? – ecodan

+0

Oui, je travaille pour SpringSource dans l'équipe Grails. –

Questions connexes