身份验证失败-grails spring security中的凭据错误

身份验证失败-grails spring security中的凭据错误,grails,spring-security,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:04480[http-bio-8090-exec-3]调试筛

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

def user = new User(username:"name", password:"pass",email:"email@gmail.rr",enabled:true).save()
我已经直接在数据库中检查了每个人的用户名和密码。 为了测试,我甚至删除了编码。 然而,当我尝试登录时,我得到了这个消息(我添加了一些额外的日志)

2014-01-27 22:49:04480[http-bio-8090-exec-3]调试筛选器.GrailsAnonymousAuthenticationFilter-使用匿名令牌填充SecurityContextHolder:“{0}” 2014-01-27 22:49:04480[http-bio-8090-exec-4]调试筛选器.GrailsAnonymousAuthenticationFilter-使用匿名令牌填充SecurityContextHolder:“{0}” 2014-01-27 23:06:19654[http-bio-8090-exec-7]调试筛选器.GrailsAnonymousAuthenticationFilter-使用匿名令牌填充SecurityContextHolder:“{0}” 2014-01-27 23:06:19833[http-bio-8090-exec-8]调试筛选器.GrailsAnonymousAuthenticationFilter-使用匿名令牌填充SecurityContextHolder:“{0}” 认证 grails.plugin.springsecurity.authentication。GrailsAnonymousAuthenticationToken@dc4a600:Principal:org.springframework.security.core.userdetails。User@dc730200:用户名:grails.anonymous.user;密码:[受保护];已启用:false;AccountNoExpired:假;无需证明的凭证:虚假;AccountNonLocked:false;授予的权限:ROLE_ANONYMOUS;凭据:[受保护];认证:正确;详细信息:org.springframework.security.web.authentication。WebAuthenticationDetails@0:RemoteIP地址:127.0.0.1;会话ID:951C58071D49B3E3AB6D55C158C46B43;授予的权限:角色\u匿名 未登录 2014-01-27 23:06:29147[http-bio-8090-exec-9]调试身份验证。请求持有者身份验证筛选器-请求处理身份验证 2014-01-27 23:06:30115[http-bio-8090-exec-9]调试身份验证.RequestHolderAuthenticationFilter-身份验证请求失败:org.springframework.security.authentication.BadCredentialsException:错误的凭据 2014-01-27 23:06:30115[http-bio-8090-exec-9]调试身份验证。RequestHolderAuthenticationFilter-更新SecurityContextHolder以包含空身份验证 2014-01-27 23:06:30115[http-bio-8090-exec-9]调试身份验证.RequestHolderAuthenticationFilter-授权给身份验证失败处理程序grails.plugin.springsecurity.web.authentication。AjaxAwareAuthenticationFailureHandler@df9533 2014-01-27 23:06:30116[http-bio-8090-exec-9]调试身份验证.AjaxAwareAuthenticationFailureHandler-重定向到/login/authfail?登录错误=1 2014-01-27 23:06:30165[http-bio-8090-exec-10]调试筛选器.GrailsAnonymousAuthenticationFilter-使用匿名令牌填充SecurityContextHolder:“{0}” 身份验证失败!!!! 2014-01-27 23:06:30235[http-bio-8090-exec-10]调试筛选器.GrailsAnonymousAuthenticationFilter-使用匿名令牌填充SecurityContextHolder:“{0}” 认证 grails.plugin.springsecurity.authentication。GrailsAnonymousAuthenticationToken@dc4a600:Principal:org.springframework.security.core.userdetails。User@dc730200:用户名:grails.anonymous.user;密码:[受保护];已启用:false;AccountNoExpired:假;无需证明的凭证:虚假;AccountNonLocked:false;授予的权限:ROLE_ANONYMOUS;凭据:[受保护];认证:正确;详细信息:org.springframework.security.web.authentication。WebAuthenticationDetails@0:RemoteIP地址:127.0.0.1;会话ID:951C58071D49B3E3AB6D55C158C46B43;授予的权限:角色\u匿名 未登录

请问你从这张照片中了解到了什么?如果需要更多信息,我会毫不犹豫地提供:)

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

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

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

既然您没有提到这是从插件的1.2.x升级到2.x,就不应该存在配置问题。如果是这样,并且您没有进行任何配置更改,您将使用SHA-256对旧密码进行哈希处理,但会将它们与bcrypt哈希密码进行比较。此外,即使您将其配置为使用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()
但是生成的用户类为您自动哈希,因此这会哈希两次。如果要这样做,请将引导代码更改为

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

我刚刚编辑了这个问题,并添加了在Bootstrap中创建用户的方法。我没有使用编码/哈希,因为我认为它会给我带来麻烦。我不知道你是否能理解我的代码出了什么问题:)你能分享Config.groovy的密码哈希设置吗,还是你在使用默认值?我不太愿意复制粘贴整个类,因为我认为我没有这个权利。我想问你是否能告诉我你说的是什么样的环境?Spring安全设置?Config.groovy中以“grails.plugin.springsecurity”开头的任何设置,例如
grails.plugin.springsecurity.password.hash.iterations
,它们与密码配置有关否,我没有该设置。我猜这是默认值,这一行:
Enabled:false;AccountNoExpired:假;无需证明的凭证:虚假;AccountNonLocked:false
您是否可能尝试使用禁用的帐户进行测试?可能,我应该如何验证?