我在Grails应用程序中使用 Spring Security Plugin 。保存密码时,它在数据库中采用加密格式。我想发送普通密码。怎么弄?
另一个Android应用程序使用我的API。从我的API,我需要发送特定用户的密码。
答案 0 :(得分:1)
如果您正在从db读取密码:当密码保存到数据库时,它们是hashed而不是encrypted和the process involved in hashing is not reversible,所以简单的答案是:否你不能。
将密码保存到数据库时可以使用加密(以便在遇到异常情况时可以解密它们),但这不是一个好主意,that is why hashing functions are preferred to encryption algorithm for saving passwords。
但是如果你真的需要这个并且知道如何处理风险,你可以拦截对user.save()
的调用,特别是拦截密码被编码的beforeInsert()
和beforeUpdate()
方法
因此,您的用户的beforeInsert()
和beforeUpdate()
方法将如下所示:
beforeInsert(){
...
yourApiService.sendPassword(password)
...
password = securityService.encodePassword(password)
...
}
beforeUpdate(){
...
if(isDirty('password')){
yourApiService.sendPassword(password)
...
password = securityService.encodePassword(password)
}
...
}
答案 1 :(得分:1)
如果您将某些API暴露给某些外部应用,我建议您使用spring security rest plugin。要开始使用Spring安全休息,请查看greach2014 talk。
如果您仍然坚持使用纯文本密码,那么您不是唯一一个要求此但具有不同意图的人。存储纯文本密码的唯一逻辑是调试spring安全性中的登录问题。它不适用于生产应用。其他人发布similar question来调试登录问题,而Burt Beckwith(spring security plugin的维护者)写了this blog。在这篇博客中,他解释了如何存储纯文本密码。