【问题标题】:Grails spring-security-core plugin question: password in User class isn't StringGrails spring-security-core插件问题:用户类中的密码不是字符串
【发布时间】:2011-02-24 11:00:42
【问题描述】:

我正在开发一个将密码作为字节 [] 存储在数据库中的应用程序。我无法更改数据库。 所以我的域类有以下内容:

String userId
byte[] userPasswd

我知道我可以自定义 Config.groovy 中的属性名称,但是对于密码属性使用 byte[] 而不是 String 数据类型呢?如果插件当前不支持此功能,我们将不胜感激。

【问题讨论】:

    标签: security spring plugins grails core


    【解决方案1】:

    有几种方法,但这似乎是最干净的,不需要更改 Config.groovy。

    像你一样将持久密码属性更改为另一个名称 (userPasswd),但为插件将使用的 getPassword() 放入一个 getter,并在那里将字节数组转换为字符串:

    class User {
    
       String username
       byte[] userPasswd
       boolean enabled
       boolean accountExpired
       boolean accountLocked
       boolean passwordExpired
    
       static constraints = {
          username blank: false, unique: true
          password blank: false
       }
    
       static transients = ['password']
    
       String getPassword() {
          userPasswd ? new String(userPasswd) : null
       }
    
       Set<Role> getAuthorities() {
          UserRole.findAllByUser(this).collect { it.role } as Set
       }
    }
    

    将“密码”添加到瞬态列表很重要,因为真正的持久字段是 userPasswd。

    这将影响您创建用户的方式,例如

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

    【讨论】:

    • 有道理。谢谢伯特。感谢您抽出宝贵的时间。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2016-03-23
    • 2012-09-29
    • 2016-01-01
    • 2015-10-06
    • 2015-03-29
    • 2012-02-17
    • 2013-04-25
    相关资源
    最近更新 更多