我对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参数的值)作为纯文本。有没有人知道如何散列这个密码?
答案 0 :(得分:0)
有一种常见的模式,用于从代码库中分离身份验证信息。您需要将此类信息存储在源版本控制系统无法控制或忽略的其他位置。然后,您将实现通过代码访问它们的方式。
例如,您可以将用于Elasticsearch的用户名和密码存储在json文件中,而git或您使用的其他VCS会将其忽略。然后在您的代码中,只需读取json文件,解析用户名和密码,然后将其分配给连接配置即可。因此,用户名和密码仅保留本地。如果您需要在其他地方运行代码,则只需要在其中创建具有正确用户名和密码的json文件即可。
答案 1 :(得分:-1)
您可以将密码存储为加密文本,然后在需要时将其解密。例如,请参阅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
BCrypt可以从Spring获得(例如)