Merge pull request #146 from Neilxzn/master

修复可能存在并发opensession的时候,realUser 可能会获取另一个session 的user
This commit is contained in:
Kent Yao 2019-01-21 11:07:15 +08:00 committed by GitHub
commit 8979fc5e73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -66,7 +66,6 @@ private[kyuubi] class FrontendService private(name: String, beService: BackendSe
private var isStarted = false
private var realUser: String = _
def this(beService: BackendService) = {
this(classOf[FrontendService].getSimpleName, beService)
@ -155,6 +154,7 @@ private[kyuubi] class FrontendService private(name: String, beService: BackendSe
}
private def getUserName(req: TOpenSessionReq): String = {
var realUser: String = null
// Kerberos
if (isKerberosAuthMode) {
realUser = authFactory.getRemoteUser.orNull
@ -171,7 +171,7 @@ private[kyuubi] class FrontendService private(name: String, beService: BackendSe
if (req.getConfiguration == null) {
realUser
} else {
getProxyUser(req.getConfiguration.asScala.toMap, getIpAddress)
getProxyUser(req.getConfiguration.asScala.toMap, getIpAddress, realUser)
}
}
@ -185,7 +185,8 @@ private[kyuubi] class FrontendService private(name: String, beService: BackendSe
}
@throws[KyuubiSQLException]
private def getProxyUser(sessionConf: Map[String, String], ipAddress: String): String = {
private def getProxyUser(sessionConf: Map[String, String],
ipAddress: String, realUser: String): String = {
Option(sessionConf).flatMap(_.get(KyuubiAuthFactory.HS2_PROXY_USER)) match {
case None => realUser
case Some(_) if !conf.get(FRONTEND_ALLOW_USER_SUBSTITUTION).toBoolean =>
@ -609,7 +610,7 @@ private[kyuubi] class FrontendService private(name: String, beService: BackendSe
server.foreach(_.serve())
} catch {
case t: Throwable =>
error("Error starting " + name + " for KyuubiServer", t)
error("Error starting " + name + " for KyuubiServer", t)
System.exit(-1)
}
}