Плагин Grails Spring-Security-Core - не может аутентифицировать пользователя - PullRequest
4 голосов
/ 24 января 2012

Поэтому я бьюсь головой об стену, пытаясь заставить spring-security-core-1.2.7.1 работать с Grails 2.0 ...

Я посмотрел учебник и запустил 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 debug '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

Ответы [ 4 ]

2 голосов
/ 24 января 2012

Я не вижу ничего явно неправильного в вашем коде. Я использую ту же версию Grails и плагин безопасности Spring, и у меня работает следующий код в 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', 'admin@mailinator.com', adminRole)
    User user = createUser('User', 'user@yahoo.co.uk', 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()
}
1 голос
/ 05 июля 2014

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

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

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

0 голосов
/ 09 ноября 2012

Вы можете решить проблему с несколькими источниками данных, обновив класс User. Смотри https://stackoverflow.com/q/13296594

0 голосов
/ 20 апреля 2012

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

...