2013-02-24 2 views
0

j'ai coutume MyUserDetailsServiceGrails comment appeler MyUserDetailsService sur le contrôleur?

class MyUserDetailsService implements GrailsUserDetailsService { 
... 
} 

et je veux appeler mon contrôleur

class MyController { 
    def springSecurityService 

    def check() { 
     String user = springSecurityService.principal.username 
     def MyUserdetails = MyUserDetailsService.loadUserByUsername(user) 
    } 
} 

et obtenir erreur

Pas de signature de la méthode: statique MyUserDetailsService.loadUserByUsername() est applicable pour argument types: (java.lang.String) valeurs: [utilisateur] Solutions possibles: loadUserByUsername (java.lang.String), loadUserByUsername (java.lang.String, Boolean)

je veux vérifier l'utilisateur après la connexion, donc je ne mets pas dans les haricots.

Répondre

0

Mettez votre service dans le dossier des services et font référence à partir de votre contrôleur:

import your.package.MyUserDetailsService 

class MyController { 

     MyUserDetailsService muds 
     def springSecurityService 

     def check() { 
      String user = springSecurityService.principal.username 
      def MyUserdetails = muds.loadUserByUsername(user) 
     } 
    } 
+0

est oh mon mauvais à mettre dans src/groovy, maintenant je mets dans les services dossier, il est un travail maintenant, btw comment obtenir l'erreur message "throw new UsernameNotFoundException ( 'Utilisateur non trouvé')" from controller? merci –

+0

sory je l'obtiens maintenant, utilisez try catch pour obtenir une exception de service, merci –

+0

Avec Grails, l'approche recommandée est de laisser le framework gérer les injections de service plutôt que de les instancier manuellement. Donc, ne déclarez pas une nouvelle instance comme MyUserDetailsService muds et remplacez plutôt l'implémentation par défaut dans le fichier resources.groovy, puis utilisez simplement def userDetailsService pour accéder aux méthodes de ce service. – uchamp

2

Je suis sûr que vous avez enregistré votre service informations utilisateur personnalisé avec Grails dans le fichier Grails-app/conf/printemps/resources.groovy, comme:

beans = { 
    userDetailsService(com.mycompany.myapp.MyUserDetailsService) 
} 

Une fois que vous avez enregistré ce que vous pouvez dépendent de Grails injection automatique de service simplement en déclarant une variable userDetailsService dans votre contrôleur et de l'utiliser, comme:

class SomeController { 
    def userDetailsService 
    ... 
    def someAction() { 
     String user = springSecurityService.principal.username 
     CustomUserDetails userdetails = userDetailsService.loadUserByUsername(user) 
    } 
} 

La documentation here est assez utile.

Questions connexes