grails spring安全自定义用户详细信息服务
将UserDetails服务注入自定义提供程序时出现问题。我有一个自定义的userDetailsService,我正试图将它注入到我的提供者中,但是,由于我的提供者的某种原因,它在一个空的userDetailsService中解析。 以下内容来自my resources.groovy:grails spring安全自定义用户详细信息服务,grails,spring-security,Grails,Spring Security,将UserDetails服务注入自定义提供程序时出现问题。我有一个自定义的userDetailsService,我正试图将它注入到我的提供者中,但是,由于我的提供者的某种原因,它在一个空的userDetailsService中解析。 以下内容来自my resources.groovy: beans = { userDetailsService(CustomUserDetailsService) { } stupidAuthenticationProvider(StupidAuthe
beans = {
userDetailsService(CustomUserDetailsService) {
}
stupidAuthenticationProvider(StupidAuthenticationProvider) {
userDetailsService = ref("userDetailsService")
}
}
基本上,我只是在我的提供者中定义它,如下所示:
public class StupidAuthenticationProvider implements AuthenticationProvider {
def userDetailsService
我缺少什么?尝试使用类的限定名称:
beans = {
userDetailsService(com.test.CustomUserDetailsService){
}
StupidAuthenticationProvider(com.test.XXX.StupidAuthenticationProvider) {
userDetailsService = ref('userDetailsService ')
}
}
您的CustomUserDetails服务是否在包中?如果是,那么您应该在配置中给出它的完全限定名 以下内容适用于我:
beans = {
userDetailsService(com.mysite.MyUserDetailsService)
//and then refer it like...
emailAuthenticationProvider(com.mysite.EmailAuthenticationProvider) {
springSecurityService = ref('springSecurityService')
userDetailsService = ref('userDetailsService')
}
}
在身份验证提供程序中
class EmailAuthenticationProvider implements AuthenticationProvider {
def userDetailsService
def springSecurityService
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
//...
}
}
查看由此定义的bean似乎是正确的名称。是否确实声明了
userDetailsService
?在引导过程中,如果打印grailsApplication.mainContext.getBean('userdetailssservice')
实例是customuserdetailssservice
?是:com.test。CustomUserDetailsService@6180ef93How你在使用stupidAuthenticationProvider吗?基本上,我刚刚将提供程序添加到springsecurity.providerNames。。。grails.plugins.springsecurity.providerNames=['stupidAuthenticationProvider']这一切进展顺利,当我尝试登录此提供程序时会触发。进入stupidAuthenticationProvider后,我将userDetailsService定义为:def userDetailsService,但这被解析为null,只是println userdetails服务或尝试调用一些方法resolvs作为null问题只是userdetails服务似乎没有被正确注入这没有改变任何事情我有一个userdetails服务没有完全限定的名称,它工作得很好。在bean DSL中,括号中的参数是java.lang.Class
对象-您可以使用完全限定名userDetailsService(com.mysite.MyUserDetailsService)
或仅使用普通名userDetailsService(MyUserDetailsService)
并在文件顶部添加合适的import com.mysite.
。两种变体都是等效的。谢谢@IanRoberts,我不知道:)