admin 사용자로 비밀번호를 변경할 수 있어야합니다. 수동으로 비밀번호 재설정과 같은 형식으로 전화로 수행 할 수 있습니다. Grails Spring Security 플러그인을 사용하면 어떻게 될까요? 이 작업을 수행하는 방법에 대한 문서를 찾으려고했지만 아무 것도 생각 나지 않았습니다.Grails Spring Security를 사용하여 프로그래밍 방식으로 사용자의 암호를 관리자로 변경하려면 어떻게해야합니까?
2
A
답변
3
AA의 대답 @,하지만 이상 - 일반 . 실제 코드는 클래스 및 필드 이름을 하드 코딩 할 수 있으므로 훨씬 더 컴팩트합니다. 또한 암호 만 업데이트했기 때문에 끝에있는 역할 업데이트는 관련이 없습니다.
사용자 클래스 이름은 User
는 사용자 정보를 표시하려면이 작업을 사용하는 경우 :
def editUserPassword() {
[user: User.get(params.userId)]
}
을하고 (이 생성 된 edit.gsp
와 유사한 것)이 게시 할 수있는 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
어떤 매개 변수 이름에 실제로
1
당신은 봄 보안 UI 플러그인을 사용하거나 그 source code을보고 방법을 배울 수 있습니다 : 플러그인 구성을 기반으로 가지고 있기 때문에 기술적으로 정확
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
}
를 사용하는 멋지다, 방금 암호를 직접 설정해 보았는데 효과가있었습니다! 필드를 설정할 때 스프링 보안이 GORM에 자동으로 비밀번호를 해시하는 것을 인식하지 못했습니다. 어떻게 든 수동으로 암호를 암호화해야한다고 생각했습니다. –
1.2의 새로운 기능입니다. 선택 사항이지만 좋은 아이디어입니다. 생성 된 사용자 클래스에는 코드가 있으며 원하는대로 자유롭게 코드를 제거하고 인코딩 할 수 있습니다. –