我在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'],
]
答案 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()