身份验证失败 - grails spring安全性中的凭据错误

时间:2014-01-27 22:16:33

标签: grails spring-security

我在Bootstrap.groovy中创建了我的用户和角色。

def user = new User(username:"name", password:"pass",email:"email@gmail.rr",enabled:true).save()

我已直接在数据库中检查了每个用户名和密码。 我甚至删除了编码用于测试目的。 但是,当我尝试登录时,我得到了这个(我添加了一些额外的日志记录)

  

2014-01-27 22:49:04,480 [http-bio-8090-exec-3] DEBUG filter.GrailsAnonymousAuthenticationFilter - 带有匿名标记的填充SecurityContextHolder:'{0}'   2014-01-27 22:49:04,480 [http-bio-8090-exec-4] DEBUG filter.GrailsAnonymousAuthenticationFilter - 带有匿名标记的填充SecurityContextHolder:'{0}'   2014-01-27 23:06:19,654 [http-bio-8090-exec-7] DEBUG filter.GrailsAnonymousAuthenticationFilter - 带有匿名标记的填充SecurityContextHolder:'{0}'   2014-01-27 23:06:19,833 [http-bio-8090-exec-8] DEBUG filter.GrailsAnonymousAuthenticationFilter - 带有匿名标记的填充SecurityContextHolder:'{0}'   认证   grails.plugin.springsecurity.authentication.GrailsAnonymousAuthenticationToken@dc4a600:校长:org.springframework.security.core.userdetails.User@dc730200:用户名: grails.anonymous.user ;密码保护];启用:false; AccountNonExpired:false; credentialsNonExpired:false; AccountNonLocked:false;授权机构:ROLE_ANONYMOUS;证书:[保护];认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@0:RemoteIpAddress:127.0.0.1; SessionId:951C58071D49B3E3AB6D55C158C46B43;授权机构:ROLE_ANONYMOUS   尚未登录   2014-01-27 23:06:29,147 [http-bio-8090-exec-9] DEBUG authentication.RequestHolderAuthenticationFilter - 请求处理身份验证   2014-01-27 23:06:30,115 [http-bio-8090-exec-9] DEBUG authentication.RequestHolderAuthenticationFilter - 身份验证请求失败:org.springframework.security.authentication.BadCredentialsException:凭据错误   2014-01-27 23:06:30,115 [http-bio-8090-exec-9] DEBUG authentication.RequestHolderAuthenticationFilter - 更新了SecurityContextHolder以包含空认证   2014-01-27 23:06:30,115 [http-bio-8090-exec-9] DEBUG authentication.RequestHolderAuthenticationFilter - 委托身份验证失败处理程序grails.plugin.springsecurity.web.authentication.AjaxAwareAuthenticationFailureHandler@df9533   2014-01-27 23:06:30,116 [http-bio-8090-exec-9] DEBUG authentication.AjaxAwareAuthenticationFailureHandler - 重定向到/ login / authfail?login_error = 1   2014-01-27 23:06:30,165 [http-bio-8090-exec-10] DEBUG filter.GrailsAnonymousAuthenticationFilter - 带有匿名标记的填充SecurityContextHolder:'{0}'   身份验证失败!!!!   2014-01-27 23:06:30,235 [http-bio-8090-exec-10] DEBUG filter.GrailsAnonymousAuthenticationFilter - 带有匿名标记的填充SecurityContextHolder:'{0}'   认证   grails.plugin.springsecurity.authentication.GrailsAnonymousAuthenticationToken@dc4a600:校长:org.springframework.security.core.userdetails.User@dc730200:用户名: grails.anonymous.user ;密码保护];启用:false; AccountNonExpired:false; credentialsNonExpired:false; AccountNonLocked:false;授权机构:ROLE_ANONYMOUS;证书:[保护];认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@0:RemoteIpAddress:127.0.0.1; SessionId:951C58071D49B3E3AB6D55C158C46B43;授权机构:ROLE_ANONYMOUS   未登录

你对这个堆栈跟踪有什么了解吗?如果需要更多信息,我会毫不犹豫地提供:)

从我在日志中看到的情况来看,当我尝试使用我在数据库中创建并验证的管理员用户登录时,Spring安全性尝试使用无法访问这些页面的匿名用户登录 这是一些更多的spring security配置

    grails.plugin.springsecurity.controllerAnnotations.staticRules = [
]
grails.plugin.springsecurity.interceptUrlMap = [
    '/candidate/*': ['ROLE_ADMIN'],

 ]

1 个答案:

答案 0 :(得分:1)

这里没什么可说的:)所有它说的是密码不好。

由于您没有提到这是从插件的1.2.x升级到2.x,因此不应该存在配置问题。如果是这样,并且您没有进行任何配置更改,那么您将使用SHA-256对旧密码进行哈希处理,但会将它们与bcrypt-hashed密码进行比较。此外,即使您将其配置为使用SHA-256,哈希迭代次数也会从1更改为10000,因此您在Config.groovy中需要grails.plugin.springsecurity.password.hash.iterations = 1

所以我猜你在BootStrap.groovy中明确地记录了密码,例如

def user = new User(username: 'me', enabled: true, password: springSecurityService.encodePassword('super_secret')).save()

但是生成的用户类会自动为您进行哈希处理,因此会哈希两次。如果您这样做,请将BootStrap代码更改为

def user = new User(username: 'me', enabled: true, password: 'super_secret').save()