如何从Grails中的Spring Security获取普通密码或解密密码?

时间:2015-07-13 12:10:28

标签: spring security grails spring-security

我在Grails应用程序中使用 Spring Security Plugin 。保存密码时,它在数据库中采用加密格式。我想发送普通密码。怎么弄?

另一个Android应用程序使用我的API。从我的API,我需要发送特定用户的密码。

2 个答案:

答案 0 :(得分:1)

如果您正在从db读取密码:当密码保存到数据库时,它们是hashed而不是encryptedthe 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。在这篇博客中,他解释了如何存储纯文本密码。