我开始使用带有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(用户名,密码)方法成功进行身份验证任何人都能详细帮助我了解我必须如何实施 插件在客户端工作(没有数据库)......?
答案 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类管理编码本身,因此存在双重编码,导致登录失败,这是由它创建的。您的应用程序中是否会出现类似的情况?当您创建除客户端以外的用户时,您是否以相同的方式编码?