grails和spring安全核心插件 - 来自客户端的authenticateion

时间:2011-10-28 06:05:33

标签: grails spring-security grails-plugin

我开始使用带有grails的spring-security-core-1.1.3插件。 我的身份验证应用程序向服务器发送请求:

def authSomeAction = {
    def req = ...//http requet here
    if(req.contains("yes")){
       render "There is such user"
    }else{
       render "There is no such user"
    }
}

只有在客户端创建了用户

,才能使用SpringSecurityUtils.reauthenticate(用户名,密码)方法成功进行身份验证

任何人都能详细帮助我了解我必须如何实施 插件在客户端工作(没有数据库)......?

1 个答案:

答案 0 :(得分:0)

我对Grails很陌生,所以我可以明显偏离基础,但我怀疑你的问题可能与你在创建用户时编码密码的方式有关。当您使用“客户端”创建用户与使用其他方法时,您是否也这样做?

例如,当我第一次开始使用spring-security-ui插件时,我使用捆绑的实用程序创建了用户,但他们都无法登录。如果我理解正确,那么spring-security-core已更新spring-security-ui,它已经将控制器中的密码编码转换为用户本身。例如,在该插件附带的spring-security-ui UserController.save()中,会发生这种情况:

if (params.password) {
    String salt = saltSource instanceof NullSaltSource ? null : params.username
    user.password = springSecurityService.encodePassword(params.password, salt)
}

但我的User类有这个(直接来自s2插件示例)

def beforeInsert() {
    encodePassword()
}

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

protected void encodePassword() {
    password = springSecurityService.encodePassword(password)
}

由于我的User类管理编码本身,因此存在双重编码,导致登录失败,这是由它创建的。您的应用程序中是否会出现类似的情况?当您创建除客户端以外的用户时,您是否以相同的方式编码?