2012-01-24 5 views
4

Так что я стучал головой о стену, пытаясь получить пружинными безопасности ядро-1.2.7.1 для работы с Grails 2.0 ...Grails Spring-Security-Core плагин - не удается проверить подлинность пользователя

Я смотрел в учебнике и запустите s2. Читал, что новый плагин шифрует пароли для вас, поэтому мой самозагрузки выглядит следующим образом:

def userRole = Role.findByAuthority('ROLE_USER') ?: new Role(authority: 'ROLE_USER').save(failOnError: true) 
    def adminRole = Role.findByAuthority('ROLE_ADMIN') ?: new Role(authority: 'ROLE_ADMIN').save(failOnError: true) 

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

     def testUser = User.findByUsername('test') ?: new User(
      username: 'test', 
      password: "test", 
      enabled: true).save(failOnError: true) 

    if (!adminUser.authorities.contains(adminRole)) { 
     UserRole.create adminUser, adminRole 
    } 

    if (!testUser.authorities.contains(userRole)) { 
     UserRole.create testUser, userRole 
    } 

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

Однако я все еще получаю «Извините, мы не смогли найти пользователя с этим именем пользователя и паролем». в приглашении для входа для обоих пользователей.

Я включил log4j отладки «org.springframework.security», но все, что я на самом деле выйти из бревен:

2012-01-23 23:08:44,875 ["http-bio-8080"-exec-5] DEBUG dao.DaoAuthenticationProvider - Authentication failed: password does not match stored value 
+0

промывка может помочь иногда, u должен попробовать это! –

ответ

2

Я не вижу ничего, очевидно, неправильно с вашим кодом. Я использую ту же версию Grails и плагин пружины безопасности, и следующий код в Bootstrap.groovy работает для меня:

def init = { servletContext -> 

    // create some roles 
    def userRole = createRole('ROLE_USER') 
    def adminRole = createRole('ROLE_ADMIN') 

    // create some users 
    User admin = createUser('Admin', '[email protected]', adminRole) 
    User user = createUser('User', '[email protected]', userRole) 
} 

private User createUser(name, username, role) { 

    def defaultPassword = 'password' 

    User user = User.findByUsername(username) ?: new User(
      name: name, 
      username: username, 
      password: defaultPassword, 
      passwordConfirm: defaultPassword, 
      enabled: true).save() 

    if (!user.authorities.contains(role)) { 
     UserRole.create user, role 
    } 
    user 
} 

private createRole(String roleName) { 
    Role.findByAuthority(roleName) ?: new Role(authority: roleName).save() 
} 
+0

Ug ... Это убивает меня ... Я даже проследил это до того, как плагины создают GrailsUser ... Он находит пользователя в базе данных и передает соответствующую информацию ... – user1085751

+0

Кажется, проблема с несколько источников данных. Как только я прокомментировал другие источники данных (которые он не должен использовать в любом случае), это сработало ... Не хорошо. – user1085751

-3

В оригинальном коде OP, то почему это имя пользователя в одинарные кавычки и пароль в два раза кавычки. Это может быть проблемой.

0

У меня была аналогичная проблема. Потому что я забыл добавить

grails.plugin.springsecurity.userLookup.userDomainClassName ='yourpackage.User' 
grails.plugin.springsecurity.userLookup.authorityJoinClassName =yourpackage.UserRole' 
grails.plugin.springsecurity.authority.className ='yourpackage.Role' 

После этого была выполнена аутентификация.

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