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

如何在Grails中从Spring Security获取普通密码或解密密码?,spring,security,grails,spring-security,Spring,Security,Grails,Spring Security,我正在Grails应用程序中使用Spring安全插件。保存密码时,它在数据库中以加密格式保存。我想用普通密码发送它。如何得到它 另一个Android应用程序使用我的API。从我的API中,我需要发送特定用户的密码。如果您正在从db读取密码:当密码保存到数据库时,它们不是,因此简单的答案是:不,您不能。 您可以在将密码保存到数据库时使用加密(以便在遇到异常情况(如您的情况)时可以解密密码),但这不是一个好主意 但是,如果您确实需要此功能,并且知道如何处理风险,则可以拦截对user.save()

我正在Grails应用程序中使用Spring安全插件。保存密码时,它在数据库中以加密格式保存。我想用普通密码发送它。如何得到它


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

如果您正在从db读取密码:当密码保存到数据库时,它们不是,因此简单的答案是:不,您不能。


您可以在将密码保存到数据库时使用加密(以便在遇到异常情况(如您的情况)时可以解密密码),但这不是一个好主意


但是,如果您确实需要此功能,并且知道如何处理风险,则可以拦截对
user.save()
的调用,特别是拦截密码编码的
beforeinert()
beforeUpdate()
方法

因此,用户的
beforeeinsert()
beforeeupdate()
方法如下所示:

beforeInsert(){

    ...
    yourApiService.sendPassword(password)
    ...
    password = securityService.encodePassword(password)
    ...

}


beforeUpdate(){

    ...
    if(isDirty('password')){

        yourApiService.sendPassword(password)
        ...
        password = securityService.encodePassword(password)

    }
    ...

}

我的建议是,如果您将一些API公开给一些外部应用程序,那么使用spring。要开始使用SpringSecurityREST,请查看


如果您仍然坚持使用纯文本密码,那么您不是唯一一个请求此密码的人,而是出于不同的目的。存储纯文本密码的唯一逻辑是在SpringSecurity中调试登录问题。它不打算用于生产应用。其他人发帖调试登录问题,Burt Beckwith(spring安全插件的维护者)写道。在本博客中,他解释了如何存储纯文本密码。

您不想发送纯文本密码(也不可能)。如果您有一个应用程序,并且能够发送一个plian密码,我会将其标记为安全风险。允许重新设置密码。Deinum…感谢您的回复…另一个应用程序使用了我的API…对于该应用程序,进一步使用需要向该应用程序发送密码…@Visme listen to M.Deinum。只是不要存储纯文本密码,也不要发送它们。如果需要重置密码,请生成新的一次性密码,将其发送给用户,并让用户选择新密码。这样对用户甚至对您都有好处,因为如果您的用户数据库遭到破坏,攻击者将获得散列和盐渍密码,而不是真正的密码。