【问题标题】: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()