本教程:
http://spring.io/blog/2010/08/11/simplified-spring-security-with-grails/
说你应该创建这样的用户:
def adminUser = SecUser.findByUsername('admin') ?: new SecUser(
username: 'admin',
password: springSecurityService.encodePassword('admin'),
enabled: true).save(failOnError: true)
然而,这不起作用。它只适用于您:
password: 'admin'
我假设(但可能是错误的)将密码以纯文本形式存储在内部数据库中(不是哈希)。
有没有办法告诉spring加密或哈希密码?它不在任何教程中,并且无法在手册中找到它 Grails 2.3.6,安全核心2.0-RC2& UI,默认安装。
我已经看过它说grails默认使用bcrypt哈希,但我不知道如何验证这一点。我想我需要安装mysql,告诉grails使用它,然后我可以查询值。
答案 0 :(得分:5)
深吸一口气。默认情况下,Grails的Spring安全插件(最新版本)不会以明文形式存储密码。
查看您的SecUser域类,您将看到它正在为您处理密码加密。您还可以在documentation中找到相关示例。
这直接来自文档。
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)
}
}
如果您还没有阅读我建议您阅读的文档。它写得很好,很可能会回答你关于插件的很多其他问题。