Плагин Grails Spring Security выпускает пароль - PullRequest
0 голосов
/ 26 марта 2012

Я успешно перешел на плагин Spring Security из плагина acegi. Создание нового пользователя работает нормально. Я могу войти.

Но в базе данных у меня много пользователей, созданных с помощью 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)
    }


}

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

В дополнение к объявлению правильного алгоритма вы должны вызвать кодировщик пароля. В моем 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)
    }
}
0 голосов
/ 26 марта 2012

попробуйте добавить

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

в

config.groovy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...