2013-02-24 3 views
0

У меня есть пользовательские MyUserDetailsServiceGrails как вызвать MyUserDetailsService на контроллере?

class MyUserDetailsService implements GrailsUserDetailsService { 
... 
} 

и я хочу, чтобы позвонить в мой контроллер

class MyController { 
    def springSecurityService 

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

и получить ошибку

Нет подписи метода: статический MyUserDetailsService.loadUserByUsername() является применимо для аргумента типов: (java.lang.String) значения: [пользователь] Возможные решения: loadUserByUsername (java.lang.String), loadUserByUsername (java.lang.String, булево)

я хочу, чтобы проверить пользователя после входа в систему, так что я не ставлю его в бобах.

ответ

0

Положите вашу службу в папке служб и ссылаться на него из контроллера:

import your.package.MyUserDetailsService 

class MyController { 

     MyUserDetailsService muds 
     def springSecurityService 

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

Ой мой плохим положить в И/заводных, теперь я положил в службах папка его работа сейчас, кстати, как получить сообщение об ошибке message "throw new UsernameNotFoundException ( « Пользователь не найден »)« от контроллера? спасибо –

+0

sory я получаю это сейчас, используйте try catch, чтобы получить исключение throw из службы, спасибо –

+0

С Grails рекомендуемый подход заключается в том, чтобы позволить фреймворкам обрабатывать служебные инъекции, а не вручную создавать их. Поэтому не объявляйте новый экземпляр, такой как MyUserDetailsService, и вместо этого перезаписывайте реализацию по умолчанию в файле resources.groovy, а затем просто используйте def userDetailsService для доступа к методам этой службы. – uchamp

2

Я уверен, что вы зарегистрировали свой собственный данные пользователей сервиса с Grails в файл Grails-приложение/CONF/весна/resources.groovy, как:

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

После того как вы зарегистрировали вы можете в зависимости от инъекции Grails автоматического обслуживания, просто объявить переменную UserDetailsService в контроллере и использовать его, как:

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

документация here очень полезно.

 Смежные вопросы

  • Нет связанных вопросов^_^