cdh4安全机制之AccessControlException

我上一篇文章写了AuthorizationException,这篇文章写写他的父类AccessControlException。
其实调用AccessControlException的地方还是挺多的,但是最后都到了checkPermission。
checkOwner调用的也是checkPermission。

 private FSPermissionChecker checkOwner(String path
      ) throws AccessControlException, UnresolvedLinkException {
    return checkPermission(path, true, null, null, null, null);
  }


checkPermission的详细方法:这个方法是在FSNamesystem。
private FSPermissionChecker checkPermission(String path, boolean doCheckOwner,
      FsAction ancestorAccess, FsAction parentAccess, FsAction access,
      FsAction subAccess) throws AccessControlException, UnresolvedLinkException {
    FSPermissionChecker pc = new FSPermissionChecker(
        fsOwner.getShortUserName(), supergroup);
    if (!pc.isSuper) {
      dir.waitForReady();
      readLock();
      try {
        pc.checkPermission(path, dir.rootDir, doCheckOwner,
            ancestorAccess, parentAccess, access, subAccess);
      } finally {
        readUnlock();
      } 
    }
    return pc;
  }


所以下一步的重点就是checkPermission的调用情况了。
checkPermission的调用
1 DFSClient-->NameNodeRpcServer-->FSNamesystem   如checkTraverse。
2 RPC --> ProtobufRpcEngine--> ClientNamenodeProtocolProtos -->  ClientNamenodeProtocolServerSideTranslatorPB--> NameNodeRpcServer -->FSNamesystem
如 checkPathAccess 这个主要是调用callMethod
3 NameNodeAdapter --> FSNamesystem  

其实这个和我想的很有差距。我的想法是起码在namaNode和dataNode中出现权限相关的吧。但是却没有发现。nameNode这个应该是分散到了NameNodeRpcServer和NameNodeAdapter 。那么dataNode的呢?

FSNamesystem   里面还有个checkOperation方法,这个做的是很简单的,只是看看是不是读操作,看看系统的配置是否让读,其实就是系统准备好了没,从他抛出的异常也可以看的出来:StandbyException。

猜你喜欢

转载自huangyunbin.iteye.com/blog/1883361