Проверка пароля SpringSecurity (специальные символы в паролях) - PullRequest
1 голос
/ 10 августа 2011

Я недавно сломал голову, пытаясь найти способ РАЗРЕШИТЬ специальные символы для паролей в плагине Spring-Security-Core Grails. Кто-нибудь может дать подсказку, где посмотреть?

Разъяснение: когда я устанавливаю плагины Spring-Security-Core, Spring-Security-UI Grails и пытаюсь зарегистрировать пользователя, предоставляющего простой пароль, состоит из [\ w \ d] {, 8}, я получаю ошибку: Password must have at least one letter, number, and special character: !@#$%^&

Ответы [ 4 ]

2 голосов
/ 12 августа 2011

Аналогичная проблема создана: http://jira.grails.org/browse/GPSPRINGSECURITYUI-25 Лучшее решение будет:

class RegisterController extends grails.plugins.springsecurity.ui.RegisterController {
def index = {
    [command: new RegisterCommand()]
}

static final myPasswordValidator = { String password, command ->
        if (command.username && command.username.equals(password)) {
        return 'command.password.error.username'
    }

    if (password && password.length() >= 8 && password.length() <= 64 &&
            (!password.matches('^.*\\p{Alpha}.*$') ||
                 !password.matches('^.*\\p{Digit}.*$')
             )) {
        return 'command.password.error.strength'
    }
}
 }

      class RegisterCommand {

String username
String email
String password
String password2

static constraints = {
    username blank: false, validator: { value, command ->
    if (value) {
    def User = AH.application.getDomainClass(
                                                     SpringSecurityUtils.securityConfig.userLookup.userDomainClassName).clazz
            if (User.findByUsername(value)) {
                return 'registerCommand.username.unique'
            }
        }
}
    email blank: false, email: true, validator: { value, command ->                                                                                                                                                                                                          
            if (value) {
            def User = AH.application.getDomainClass(
                                                     SpringSecurityUtils.securityConfig.userLookup.userDomainClassName).clazz
            if (User.findByEmail(value)) {
                return 'registerCommand.email.unique'
    }
        }    
}
    password blank: false, minSize: 8, maxSize: 64, validator: RegisterController.myPasswordValidator
password2 validator: RegisterController.password2Validator
}
}



class ResetPasswordCommand {
String username
String password
String password2

static constraints = {
password blank: false, minSize: 8, maxSize: 64, validator: RegisterController.myPasswordValidator
password2 validator: RegisterController.password2Validator
}
}
2 голосов
/ 12 августа 2011

Я думаю, вам следует создать свой собственный RegisterController, расширяющий пользовательский интерфейс Spring Security, как описано здесь: http://burtbeckwith.github.com/grails-spring-security-ui/docs/manual/guide/10%20Customization.html

grails s2ui-override Register com.my.package

и затем переопределите метод passwordValidator, заменив метод проверки на то, что вы хотите:

if (password && password.length() >= 8 && password.length() <= 64 &&
    (!password.matches('^.*\\p{Alpha}.*$') ||
    !password.matches('^.*\\p{Digit}.*$') || {
    return 'command.password.error.strength'
}

Если вы не хотите вводить специальные символы в пароле (?!)

Джим.

1 голос
/ 28 ноября 2013

как насчет того, чтобы сделать что-то подобное?

добавьте это в свой Config.groovy:

grails.plugin.springsecurity.ui.password.validationRegex='^([a-zA-Z0-9@*#_%])$'
grails.plugin.springsecurity.ui.password.minLength=8
grails.plugin.springsecurity.ui.password.maxLength=64
0 голосов
/ 08 сентября 2014

Вы можете установить параметры в config.groovy.Они перезапишут параметры по умолчанию.Так, например:

grails.plugin.springsecurity.ui.password.validationRegex='^([a-zA-Z0-9@*#_%])*$'
grails.plugin.springsecurity.ui.password.minLength=8
grails.plugin.springsecurity.ui.password.maxLength=64

Это похоже на ответ Джеффа, предоставленный ранее, однако в его qnswer отсутствует звездочка, означающая, что он будет соответствовать только одной символьной строке.

(я не могу добавить это как комментарий, так как у меня недостаточно репутации)

...