2

安装 Spring Security Core 作为插件然后快速启动

这是我的用户域类

package auth
class User {
   def springSecurityService
   String username
   String password
   boolean enabled
   boolean accountExpired
   boolean accountLocked
   boolean passwordExpired
   static mapping = {
          // password is a keyword in some sql dialects, so quote with backticks
          // password is stored as 44-char base64 hashed value
       password column: '`password`', length: 64
   }
   static constraints = {
       username blank: false, size: 1..50, unique: true
       password blank: false, size: 8..100
   }


   Set getAuthorities() {
      UserRole.findAllByUser(this).collect { it.role } as Set
   }

   def beforeInsert() {
     encodePassword()
   }

   def beforeUpdate() {
      if (isDirty('password')) {
        encodePassword()
      }
   }

   protected encodePassword() {
        password = springSecurityService.encodePassword(password, username)
   }
}

我的 boostrap.groovy 是

class BootStrap {

  def init = { servletContext ->

    auth.User james = new auth.User(username: 'test', enabled: true, password: 'password')
    james.save()
    if (james.hasErrors())
    {
        println("he has errors")
    }


    println("we made it! ")
}

   def destroy = {
   }
}

但是当我去登录时,它一直说“对不起,我们无法找到具有该用户名和密码的用户。” 有什么想法吗?

4

4 回答 4

2

这是因为您在对密码进行编码时使用了盐。

password = springSecurityService.encodePassword(password, username)

我不知道加盐,因此不能指导你太多。

但是,如果您在不加盐的情况下对密码进行编码,那么您的代码就可以工作,只需在编码密码时删除用户名,试试这个

password = springSecurityService.encodePassword(password)

希望这可以帮助。

于 2013-09-24T19:23:38.187 回答
1

如果您在 中创建用户BootStrap.groovy,请尝试更改:

def adminUser = User.findByUsername('admin') ?: new User(
    username: 'admin',
    password: springSecurityService.encodePassword('admin'),
    enabled: true).save(failOnError: true)

对此:

def adminUser = User.findByUsername('admin') ?: new User(
    username: 'admin',
    password: 'admin',
    enabled: true).save(failOnError: true)

问题是您使用了两次编码密码,一次在域中,一次在构造函数的参数中。

于 2017-03-27T22:36:24.213 回答
0

你能验证用户实际上是被引导到数据库中的吗?

如果是这样,我遇到了类似的问题,Tomcat 错误地缓存了一些数据。

这是我所做的:

  1. 停止Tomcat
  2. 删除 Tomcat 的 Temp 目录下的所有文件
  3. 重新启动Tomcat

在那之后,它工作得很好。

让我知道这是否有帮助。

于 2013-09-24T19:15:22.580 回答
0

此外,我已经有一段时间没有从头开始构建 Grails 站点了,但我想我记得一些在线说明存在问题。SpringSecurity 可能正在为您编码密码,所以当您这样做时,它会被双重编码

尝试删除编码密码的行。

于 2013-09-24T19:20:34.340 回答