我正在开发一个在db中将密码存储为byte []的应用程序。我无法改变数据库。 所以我的域类有以下内容:
String userId
byte[] userPasswd
我知道我可以在Config.groovy中自定义属性的名称,但是对于password属性使用byte []而不是String数据类型呢?如果插件当前不支持此功能,我们将非常感谢您的解决方法。
答案 0 :(得分:1)
有几种方法,但这似乎是最干净的,不需要Config.groovy更改。
将持久性密码属性更改为另一个名称(userPasswd),但将插件放入getPassword()的getter中,插件将使用,并将字节数组转换为String:
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()