GrailsSpring安全插件密码问题
我已经成功地从acegi插件迁移到Spring安全插件。创建一个新用户很好。我可以登录 但是在数据库中,我使用acegi的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.
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)
}
}