Grails 3 + Spring Security Core插件确认密码

时间:2016-01-11 19:36:34

标签: grails spring-security

你好今天我已经开始学习使用Spring Security Core Plugin的Grails 3,但是我很难用密码验证。当用户注册时,我希望他输入密码并确认密码。如果没有哈希密码,一切都会好的。我希望我的密码在数据库中编码,但是使用编码我无法比较这两个密码。

这是我的班级:

@EqualsAndHashCode(includes='username')
@ToString(includes='username', includeNames=true, includePackage=false)
class User implements Serializable {

    private static final long serialVersionUID = 1

    transient springSecurityService

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

    User(String username, String password) {
        this()
        this.username = username
        this.password = password
        this.confirmPass = password
    }

    Set<Role> getAuthorities() {
        UserRole.findAllByUser(this)*.role
    }

    // because of that I can't compare password and confirmPass
    def beforeInsert() {
        encodePassword()
    }

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

    protected void encodePassword() {
        password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password
    }

    static transients = ['springSecurityService']

    static constraints = {
        username blank: false, unique: true
        password blank: false, size: 5..60, password: true, display: false, validator: { val, obj ->
            if (!obj.id && !obj.password) {
                return 'validation.user.password' // my message
            }
        }
        confirmPass blank: // now I'm stuck here, I've tried isPasswordValid() but won't work cuz of 'salt' What shout go here?
    }

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

我该怎么做才能使它工作(两个密码都相同,然后在数据库中编码密码存储)。

0 个答案:

没有答案