UserGroupInformation#getCurrentUser函数
该函数比较难理解之处在于Server端调用时,通过
AccessControlContext context = AccessController.getContext();
获取一个AccessControlContext对象,该对象包含当前线程中所有的Subject实体,由于服务器端会启动多个handler线程并行处理客户端请求,因此每个handler内部的AccessControlContext均是不同的,它们通常与对应的客户端信息相同。很多人阅读代码时不明白AccessControlContext是怎样自动填充的?这个对象的内容在RPC 层调用UserGroupInformation#doAs函数时会自动填充,具体可了解JDK中对AccessControlContext的说明文档。