Grails Spring Security Core插件-无法对用户进行身份验证



所以我的头撞在墙上,试图让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调试"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

我看不出您的代码有任何明显的错误。我使用的是相同版本的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()
}

我确实遇到了类似的问题。是因为我忘了添加

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

之后,身份验证开始工作。

您可以通过更新User类来解决多个数据源的问题。看见https://stackoverflow.com/q/13296594

在OP的原始代码中,为什么用户名用单引号,密码用双引号。这可能就是问题所在。

相关内容

最新更新