0

我有自定义 MyUserDetailsS​​ervice

class MyUserDetailsService implements GrailsUserDetailsService {
 ...
}

我想打电话给我的控制器

class MyController {
    def springSecurityService

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

并得到错误

没有方法签名:静态 MyUserDetailsS​​ervice.loadUserByUsername() 适用于参数类型:(java.lang.String) 值:[user] 可能的解决方案:loadUserByUsername(java.lang.String), loadUserByUsername(java.lang.String, boolean )

我想在登录后检查用户,所以我不把它放在 bean 中。

4

2 回答 2

2

我相信您会在文件 grails-app/conf/spring/resources.groovy 中使用 Grails 注册自定义用户详细信息服务,例如:

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

注册后,您可以通过在控制器中声明 userDetailsS​​ervice 变量并使用它来依赖 Grails 自动服务注入,例如:

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

这里的文档很有帮助。

于 2013-02-24T08:19:02.230 回答
0

将您的服务放在服务文件夹中并从您的控制器中引用它:

 import your.package.MyUserDetailsService

 class MyController {

        MyUserDetailsService muds
        def springSecurityService

        def check() {
            String user = springSecurityService.principal.username
            def MyUserdetails = muds.loadUserByUsername(user)
        }
  }
于 2013-02-24T08:26:51.027 回答