如何以编程方式更改用户';使用Grails Spring Security将密码设置为管理员?
我需要能够以管理员用户的身份更改用户密码,有点像可以通过电话执行的手动密码重置功能。我如何使用GrailsSpring安全插件来实现这一点?我试图寻找有关如何实现这一点的文档,但没有找到任何结果。您可以使用spring security ui插件,也可以查看它并了解如何:如何以编程方式更改用户';使用Grails Spring Security将密码设置为管理员?,grails,spring-security,grails-2.0,Grails,Spring Security,Grails 2.0,我需要能够以管理员用户的身份更改用户密码,有点像可以通过电话执行的手动密码重置功能。我如何使用GrailsSpring安全插件来实现这一点?我试图寻找有关如何实现这一点的文档,但没有找到任何结果。您可以使用spring security ui插件,也可以查看它并了解如何: def update = { String passwordFieldName = SpringSecurityUtils.securityConfig.userLookup.passwordPropertyName
def update = {
String passwordFieldName = SpringSecurityUtils.securityConfig.userLookup.passwordPropertyName
def user = findById()
if (!user) return
if (!versionCheck('user.label', 'User', user, [user: user])) {
return
}
def oldPassword = user."$passwordFieldName"
user.properties = params
if (params.password && !params.password.equals(oldPassword)) {
String salt = saltSource instanceof NullSaltSource ? null : params.username
user."$passwordFieldName" = springSecurityUiService.encodePassword(params.password, salt)
}
if (!user.save(flush: true)) {
render view: 'edit', model: buildUserModel(user)
return
}
String usernameFieldName = SpringSecurityUtils.securityConfig.userLookup.usernamePropertyName
lookupUserRoleClass().removeAll user
addRoles user
userCache.removeUserFromCache user[usernameFieldName]
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'user.label', default: 'User'), user.id])}"
redirect action: edit, id: user.id
}
@AA的回答在技术上是正确的,但过于通用,因为插件必须基于配置。真正的代码将更加紧凑,因为您可以硬编码类名和字段名。此外,由于您只要求更新密码,因此最后的角色更新并不相关 如果用户类名为
user
,则使用此操作显示用户信息:
def editUserPassword() {
[user: User.get(params.userId)]
}
并在GSP中配置表单(类似于生成的edit.GSP
),以发布到此操作:
def updateUserPassword() {
def user = User.get(params.userId)
user.password = params.newPassword
if (!user.save())
render view: 'editUserPassword', model: [user: user]
return
}
// redirect to the 'success' page or render the user with [user: user]
}
将
userId
和newPassword
更改为您实际使用的任何参数名称Cool,我只是尝试直接设置密码,结果成功了!我没有意识到Spring安全性将绑定到GORM,以便在设置字段时自动散列密码。我想我必须手动加密密码。从1.2开始,这是新的,它是可选的,但是是个好主意。生成的用户类有代码,您可以随意删除它并对密码进行编码。