2013-09-24 2 views
2

Installed Spring Security Ядра, как плагин затем сделал быстрый стартпружинные ядро ​​безопасности Grails не войдя в

Вот мой домен пользователя класс

package auth 
class User { 
    def springSecurityService 
    String username 
    String password 
    boolean enabled 
    boolean accountExpired 
    boolean accountLocked 
    boolean passwordExpired 
    static mapping = { 
      // password is a keyword in some sql dialects, so quote with backticks 
      // password is stored as 44-char base64 hashed value 
     password column: '`password`', length: 64 
    } 
    static constraints = { 
     username blank: false, size: 1..50, unique: true 
     password blank: false, size: 8..100 
    } 


    Set getAuthorities() { 
     UserRole.findAllByUser(this).collect { it.role } as Set 
    } 

    def beforeInsert() { 
    encodePassword() 
    } 

    def beforeUpdate() { 
     if (isDirty('password')) { 
     encodePassword() 
     } 
    } 

    protected encodePassword() { 
     password = springSecurityService.encodePassword(password, username) 
    } 
} 

И мой boostrap.groovy является

class BootStrap { 

    def init = { servletContext -> 

    auth.User james = new auth.User(username: 'test', enabled: true, password: 'password') 
    james.save() 
    if (james.hasErrors()) 
    { 
     println("he has errors") 
    } 


    println("we made it! ") 
} 

    def destroy = { 
    } 
} 

Но когда я иду на логин, он говорит: «Извините, мы не смогли найти пользователя с этим именем пользователя и паролем». Есть предположения?

ответ

2

Это потому, что вы используете salt при кодировании пароля.

password = springSecurityService.encodePassword(password, username) 

Я понятия не имею, чтобы солить и, следовательно, не может направлять вас на многое.

Но если вы закодировать пароль без посола, то ваш код работает, просто удалить имя пользователя при кодировании пароля, попробуйте этот

password = springSecurityService.encodePassword(password) 

Надеется, что это помогает.

0

Можете ли вы проверить, действительно ли пользователь загружается в базу данных?

Если это так, я столкнулся с аналогичной проблемой, когда Tomcat некорректно кэшировал некоторые данные.

Вот что я сделал:

  1. Остановился Tomcat
  2. Удаляется все файлы в директории Temp Tomcat в
  3. перезапущен Tomcat

После этого он работал отлично.

Дайте мне знать, если это поможет.

+0

Так что я использую intellij и использую плагин tomcat.Также используется база данных в памяти. Будет ли это просто включать удаление и добавление плагина tomcat? – Badmiral

+0

Нет, я так не думаю. Но другой человек задал аналогичный вопрос и сказал, что очистка проекта помогла: http://stackoverflow.com/questions/18985126/grails-2-3-0-view-rendering-issue/18985225#18985225 –

0

Кроме того, это было время, так как я создал сайт Grails с нуля, но я думаю, что я помню, что проблема связана с некоторыми онлайн-инструкциями. SpringSecurity может кодировать пароль для вас, поэтому, когда вы это делаете, он получает с двойным кодированием.

Попробуйте удалить строки, которые кодируют пароль.

+0

Пробовал это, получил такой же результат :( – Badmiral

1

При создании пользователя в BootStrap.groovy, попробуйте изменить это:

def adminUser = User.findByUsername('admin') ?: new User(
    username: 'admin', 
    password: springSecurityService.encodePassword('admin'), 
    enabled: true).save(failOnError: true) 

к этому:

def adminUser = User.findByUsername('admin') ?: new User(
    username: 'admin', 
    password: 'admin', 
    enabled: true).save(failOnError: true) 

Проблема заключается в том, что вы используете пароль кодирования дважды, один раз в домене и один раз в параметрах конструктора.

Смежные вопросы