GrailsSpring安全插件密码问题

GrailsSpring安全插件密码问题,spring,security,grails,migration,spring-security,Spring,Security,Grails,Migration,Spring Security,我已经成功地从acegi插件迁移到Spring安全插件。创建一个新用户很好。我可以登录 但是在数据库中,我使用acegi的authenticateService.encodePassword创建了很多用户。所以我不能使用那些旧用户名和密码登录。我想这是MD5或SHA1编码算法的问题 只是想知道,如何使它不重置密码的工作。我试着设置grails.plugins.springsecurity.password.algorithm=“MD5”,但没有成功 有什么建议吗 包验证 import java.

我已经成功地从acegi插件迁移到Spring安全插件。创建一个新用户很好。我可以登录

但是在数据库中,我使用acegi的
authenticateService.encodePassword
创建了很多用户。所以我不能使用那些旧用户名和密码登录。我想这是MD5或SHA1编码算法的问题

只是想知道,如何使它不重置密码的工作。我试着设置grails.plugins.springsecurity.password.algorithm=“MD5”,但没有成功

有什么建议吗

包验证

import java.util.Set;
import auth.Role

/**
 * User domain class.
 */
class User  implements Serializable {
    static transients = ['pass','getAuthorities']
    static hasMany = [authorities: Role]
    static belongsTo = Role

    transient springSecurityService

    static mapping = {
        table 'users' // USER not a valid table name in oracle
    }

    /** Username */
    String username
    /** User Real Name*/
    String userRealName
    /** MD5 Password */
    String passwd

    String password

    /** enabled */
    boolean enabled

    String email
    boolean emailShow

    /** description */
    String description = ''

    /** plain password to create a MD5 password */
    String pass = '[secret]'

    boolean accountExpired 
    boolean accountLocked 
    boolean passwordExpired  

    String toString() {
        return userRealName
    }

    static constraints = {
        username(blank: false, unique: true)
        userRealName(blank: false)
        passwd(blank: false)
        password(blank: false)
        enabled()
        description(nullable:true)
    }

    /*Set<Role> getAuthorities() {
        Role.findAllByUser(this).collect { it.role } as Set
    }*/

    def beforeInsert() {
        encodePassword()
    }

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

    protected void encodePassword() {
        password = springSecurityService.encodePassword(password,null)
    }


}
import java.util.Set;
导入身份验证角色
/**
*用户域类。
*/
类用户实现可序列化{
静态瞬态=['pass','getAuthorities']
静态hasMany=[权限:角色]
静态belongsTo=角色
临时安全服务
静态映射={
表'users'//用户在oracle中不是有效的表名
}
/**用户名*/
字符串用户名
/**用户实名*/
字符串userRealName
/**MD5密码*/
字符串密码
字符串密码
/**启用*/
布尔启用
字符串电子邮件
布尔电子邮件显示
/**描述*/
字符串描述=“”
/**创建MD5密码的普通密码*/
字符串传递='[secret]'
布尔帐户已过期
布尔帐户锁定
布尔密码过期
字符串toString(){
返回userRealName
}
静态约束={
用户名(空白:false,唯一:true)
userRealName(空白:false)
passwd(空白:false)
密码(空白:false)
启用()
描述(可空:真)
}
/*设置getAuthorities(){
Role.findallbyser(this.collect{it.Role}作为集合
}*/
def beforeInsert(){
encodePassword()
}
def beforeUpdate(){
if(isDirty(‘密码’)){
encodePassword()
}
}
受保护的无效密码(){
password=springSecurityService.encodePassword(密码,null)
}
}
尝试添加

grails.plugins.springsecurity.password.algorithm='SHA-512'


除了声明正确的算法外,还必须实际调用密码编码器。在我的
User
课程中,我是这样做的:

class User {

    def springSecurityService
    static transients = ['springSecurityService', 'passwordConfirm']

    String password
    String passwordConfirm

    def beforeInsert() {
        encodePassword()
    }

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

    protected void encodePassword() {            
            password = springSecurityService.encodePassword(password, null)
            passwordConfirm = springSecurityService.encodePassword(passwordConfirm, null)
    }
}

不。同样的错误。“身份验证失败:密码与存储值不匹配。”我还有什么遗漏或线索吗?acegi是否使用md5Hex?如果是这样的话,如何将其添加到配置中?我想出来了。它以前是SHA1使用的。谢谢大家。
class User {

    def springSecurityService
    static transients = ['springSecurityService', 'passwordConfirm']

    String password
    String passwordConfirm

    def beforeInsert() {
        encodePassword()
    }

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

    protected void encodePassword() {            
            password = springSecurityService.encodePassword(password, null)
            passwordConfirm = springSecurityService.encodePassword(passwordConfirm, null)
    }
}