我对Elasticsearch有疑问。我使用Search Guard作为传输层安全性,当我想从elasticsearch读取数据时,我必须提供用户名和密码。像这样:
import org.apache.spark.{SparkConf, SparkContext}
import org.elasticsearch.spark._
object ReadDataFromES {
def main(args: Array[String]) {
val conf = new SparkConf()
.setAppName("SampleESApp")
.set("es.index.auto.create", "true")
.set("es.nodes", "localhost:9200")
.set("es.net.http.auth.user", "elastic_user")
.set("es.net.http.auth.pass", "elastic_password")
val sc = new SparkContext(conf)
print("Reading data \n\n\n")
val RDD = sc.esRDD("bank/account")
println(RDD.first())
println("\n\n")
/*
print("Writing data \n\n\n")
RDD.saveToEs("bank/spark")
*/
}
}
但问题是我不想在我的代码中将密码(es.net.http.auth.pass参数的值)作为纯文本。有谁知道散列这个密码的方法?
从代码库中分离认证信息有一种共同的模式。您需要将此类信息存储在其他位置,这些信息不受源版本控制系统的控制或忽略。并且您实现了如何在代码中访问它们的方式。
例如,您可以在json文件中存储elasticsearch的用户名和密码,git或您使用的其他VCS会忽略该文件。然后在您的代码中只读取json文件,解析用户名和密码并将它们提供给连接配置。所以用户名和密码只保留在本地。如果你需要在另一个地方运行代码,你只需要创建一个带有适当用户名和密码的json文件。
您可以将密码存储为加密文本,然后在需要时将其解密。例如,请参阅How to encrypt and decrypt String with my passphrase in Java (Pc not mobile platform)?
或者,看到这个答案val encryptedPassword = BCrypt.hashpw(password.trim(),BCrypt.gensalt())
https://stackoverflow.com/questions/43189900/hash-salt-and-save-password-slick
可以从Spring获得BCrypt(例如)