Play框架[我正在使用v1.2.3]不支持存储在application.conf中的db password加密。它存储为纯文本文件。 DBPlugin读取此属性并创建连接池。
要求是加密此密码 - 例如使用Jasypt。一些企业将此作为安全措施来实施。
有人试过做这样的事吗?
由于DBPlugin在ApplicationStart上加载,因此无法破解它。这留下了编写自定义插件并onConfigurationRead为application.conf属性的db.password设置新值。
有什么建议吗?
答案 0 :(得分:11)
最后我通过编写Play插件来解决这个问题。编写Play插件也很容易。 以下是示例代码:
package plugin;
import java.util.Properties;
import org.jasypt.util.text.StrongTextEncryptor;
import play.Play;
import play.PlayPlugin;
public class DBPasswordInject extends PlayPlugin {
@Override
public void onConfigurationRead() {
StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor();
strongTextEncryptor.setPassword("$Look##$2");// this password has been used to encrypt
String encryptedPassword = Play.configuration.getProperty("db.pass");
String decrypted = strongTextEncryptor.decrypt(encryptedPassword);
Play.configuration.setProperty("db.pass", decrypted); //override
super.onConfigurationRead();
}
}
唯一的缺点是我无法使用 org.jasypt.util.password.StrongPasswordEncryptor - 因为没有解密方法。
答案 1 :(得分:1)
问题是应该使用哪个密码来加密密码?如果您使用默认密码,那也不安全。如果将其放入配置文件中,则会出现递归问题。我看到的唯一解决方案是使用您自己的插件来存储密码并更改应用程序属性中的值。然后密码可以存储,没有任何问题。至少在Play1.x。