2012-08-29 2 views
2

admin 사용자로 비밀번호를 변경할 수 있어야합니다. 수동으로 비밀번호 재설정과 같은 형식으로 전화로 수행 할 수 있습니다. Grails Spring Security 플러그인을 사용하면 어떻게 될까요? 이 작업을 수행하는 방법에 대한 문서를 찾으려고했지만 아무 것도 생각 나지 않았습니다.Grails Spring Security를 ​​사용하여 프로그래밍 방식으로 사용자의 암호를 관리자로 변경하려면 어떻게해야합니까?

답변

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] 
} 

변경 userIdnewPassword 어떤 매개 변수 이름에 실제로

+0

를 사용하는 멋지다, 방금 암호를 직접 설정해 보았는데 효과가있었습니다! 필드를 설정할 때 스프링 보안이 GORM에 자동으로 비밀번호를 해시하는 것을 인식하지 못했습니다. 어떻게 든 수동으로 암호를 암호화해야한다고 생각했습니다. –

+0

1.2의 새로운 기능입니다. 선택 사항이지만 좋은 아이디어입니다. 생성 된 사용자 클래스에는 코드가 있으며 원하는대로 자유롭게 코드를 제거하고 인코딩 할 수 있습니다. –

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 
}