Grails springSecurityService如何不在明文中存储密码?

Grails springSecurityService如何不在明文中存储密码?,grails,spring-security,Grails,Spring Security,本教程: 表示您应该创建如下用户: def adminUser = SecUser.findByUsername('admin') ?: new SecUser( username: 'admin', password: springSecurityService.encodePassword('admin'), enabled: true).save(failOnError: true) 然而,这是行不通的。仅当您执行

本教程:

表示您应该创建如下用户:

def adminUser = SecUser.findByUsername('admin') ?: new SecUser(
            username: 'admin',
            password: springSecurityService.encodePassword('admin'),
            enabled: true).save(failOnError: true)
然而,这是行不通的。仅当您执行以下操作时,它才起作用:

           password: 'admin'
我假设(但可能是错误的)它以纯文本(不是散列)的形式将密码存储在内部数据库中

有没有办法告诉spring加密或散列密码?它不在任何教程中,在手册中也找不到 Grails2.3.6,安全核心2.0-RC2&UI,默认安装


我看到它说grails默认使用bcrypt进行散列,但我不知道如何验证这一点。我想我需要安装mysql,告诉grails使用它,然后我可以查询值。

深呼吸。默认情况下,Grails的spring安全插件(最新版本)不会以明文形式存储密码

看看您的SecUser域类,您将看到它正在为您处理密码加密。您还可以在中看到这方面的示例

这直接来自文档

package com.mycompany.myapp
class User {

   transient springSecurityService

   String username
   String password
   boolean enabled = true
   boolean accountExpired
   boolean accountLocked
   boolean passwordExpired

   static transients = ['springSecurityService']

   static constraints = {
      username blank: false, unique: true
      password blank: false
   }

   static mapping = {
      password column: '`password`'
   }

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

   def beforeInsert() {
      encodePassword()
   }

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

   protected void encodePassword() {
      password = springSecurityService.encodePassword(password)
   }
}
package com.mycompany.myapp
类用户{
临时安全服务
字符串用户名
字符串密码
布尔启用=真
布尔帐户已过期
布尔帐户锁定
布尔密码过期
静态瞬态=['springSecurityService']
静态约束={
用户名空白:false,唯一:true
密码空白:false
}
静态映射={
密码列:“`password`”
}
设置getAuthorities(){
UserRole.findallbyser(this.collect{it.role}作为集合
}
def beforeInsert(){
encodePassword()
}
def beforeUpdate(){
if(isDirty(‘密码’)){
encodePassword()
}
}
受保护的无效密码(){
password=springSecurityService.encodePassword(密码)
}
}

如果您尚未阅读文档,我建议您阅读。它写得很好,可能会回答你关于插件的许多其他问题。

深呼吸。默认情况下,Grails的spring安全插件(最新版本)不会以明文形式存储密码

看看您的SecUser域类,您将看到它正在为您处理密码加密。您还可以在中看到这方面的示例

这直接来自文档

package com.mycompany.myapp
class User {

   transient springSecurityService

   String username
   String password
   boolean enabled = true
   boolean accountExpired
   boolean accountLocked
   boolean passwordExpired

   static transients = ['springSecurityService']

   static constraints = {
      username blank: false, unique: true
      password blank: false
   }

   static mapping = {
      password column: '`password`'
   }

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

   def beforeInsert() {
      encodePassword()
   }

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

   protected void encodePassword() {
      password = springSecurityService.encodePassword(password)
   }
}
package com.mycompany.myapp
类用户{
临时安全服务
字符串用户名
字符串密码
布尔启用=真
布尔帐户已过期
布尔帐户锁定
布尔密码过期
静态瞬态=['springSecurityService']
静态约束={
用户名空白:false,唯一:true
密码空白:false
}
静态映射={
密码列:“`password`”
}
设置getAuthorities(){
UserRole.findallbyser(this.collect{it.role}作为集合
}
def beforeInsert(){
encodePassword()
}
def beforeUpdate(){
if(isDirty(‘密码’)){
encodePassword()
}
}
受保护的无效密码(){
password=springSecurityService.encodePassword(密码)
}
}

如果您尚未阅读文档,我建议您阅读。它写得很好,可能会回答你关于插件的许多其他问题。

看看你的SecUser类。您将看到,当您设置它时,它实际上正在为您加密该值。因此,您的数据库没有明文。这是Spring安全插件的默认设置。请查看您的SecUser类。您将看到,当您设置它时,它实际上正在为您加密该值。因此,您的数据库没有明文。这是Spring安全插件的默认设置。