Grails Spring-Security - 如何比较密码-
Posted
技术标签:
【中文标题】Grails Spring-Security - 如何比较密码-【英文标题】:Grails Spring-Security -how to compare passwords- 【发布时间】:2014-07-29 17:46:02 【问题描述】:我正在使用 SpringSecurity 2.0-RC2 并希望用户能够在他们在线时更改他们的密码。
我的用户域类有以下内容
def beforeInsert()
encodePassword()
def beforeUpdate()
if (isDirty('password'))
encodePassword()
protected void encodePassword()
password = springSecurityService.encodePassword(password)
为了检查用户是否输入了正确的当前密码,我在控制器中执行了以下操作:
if (springSecurityService.encodePassword(params.currentPassword) == user.password)
...但令人惊讶的是(对我来说)检查总是失败。如果我这样做,那就更奇怪了:
println springSecurityService.encodePassword(params.currentPassword)
println springSecurityService.encodePassword(params.currentPassword)
我在控制台中收到以下内容
$2a$10$sWt7mUSHPFT.Np6m.gXyl.h8tWqblJbwtzQ6EQeMHxXMoGwOffC3e $2a$10$lwHz1SkNlW8ibznt.mOiruAg5eG/BTtsjM7ChyYVBvamRcrL8tucm
(好像会有盐 - 但我自己没有配置)
我的设置或多或少是默认设置;除了三个域类的包名。
由于文档自严重几天以来一直处于关闭状态,我在这里询问是否有人知道我做错了什么......
【问题讨论】:
【参考方案1】:试试这个
def passwordEncoder
...
passwordEncoder.isPasswordValid(user.password, params.currentPassword, null)
更多详情请参阅this post。
【讨论】:
谢谢!你知道为什么params.currentPassword == springSecurityService.encodePassword(password)
不起作用吗?
它对我不起作用。我正在使用 Grails 3.3.0 和 spring security core :3.2.0.M1 。在数据库 h2 中,我看到密码以 $2 开头,我认为这不是获取纯密码的可逆过程。无论如何,这个方法 passwordEncoder.isPasswordValid(user.password, params.currentPassword, null) 没有帮助。【参考方案2】:
def springSecurityService
if(springSecurityService?.passwordEncoder?.matches(currentPassword ,
currentUser.password ))
println("password matched")
鉴于: currentPassword = 原始/未编码密码
currentUser.password = 编码密码
【讨论】:
【参考方案3】:使用 out 的另一种方法是:
new BCryptPasswordEncoder().matches(plainPassword,encodedUserPassword);
其中普通密码是原始密码值,编码密码是springSecurityService散列的密码
【讨论】:
【参考方案4】:def springSecurityService
if(user.password == springSecurityService.encodePassword(params.currentPassword))
println("User Password and params password is same")
else
println("User Password and params password are not equal")
【讨论】:
以上是关于Grails Spring-Security - 如何比较密码-的主要内容,如果未能解决你的问题,请参考以下文章
Spring-security/Grails 应用程序 - 未调用自定义 WebSecurity 配置
Grails Spring-Security - 如何比较密码-
休息资源的 Grails spring-security 静态规则似乎无法正常工作