写点什么

druid 源码学习五 -AccessController 探索

作者:Nick
  • 2022 年 5 月 16 日
  • 本文字数:982 字

    阅读完需:约 3 分钟

druid源码学习五-AccessController探索

一、DruidDataSource 初始化

紧接着初始化方法最后段代码,我们会发现这里创建类多个线程,

比如 createAndLogThread,createAndStartCreatorThread、createAndStartDestroyThread。

发现这些都是定义的内部类。再展开 DruidDataSource 类的整体结构


    createAndLogThread();    createAndStartCreatorThread();    createAndStartDestroyThread();
initedLatch.await(); init = true;
initedTime = new Date(); registerMbean();
复制代码

二、DruidDataSource 类结构


另外这段值得注意的是 registerMbean()方法;进入该方法,可见



public void registerMbean() { if (!mbeanRegistered) { AccessController.doPrivileged(new PrivilegedAction<Object>() {
@Override public Object run() { ObjectName objectName = DruidDataSourceStatManager.addDataSource(DruidDataSource.this, DruidDataSource.this.name);
DruidDataSource.this.setObjectName(objectName); DruidDataSource.this.mbeanRegistered = true;
return null; } }); } }
复制代码


有点蒙圈,AccessController 是啥?再往下 ObjectName 又是要干啥?为了搞懂这段代码什么意思,继续探索其源代码。

三、AccessController 类

借助 Jdk 帮助文档:

AccessController 类用于访问控制操作和决策。


更具体地说,AccessController 类用于三个目的:


  • 根据当前有效的安全策略来决定是否允许或拒绝对关键系统资源的访问;

  • 将代码标记为“特权”,从而影响随后的访问确定 ;

  • 为了获得当前呼叫上下文的“快照”,可以针对保存的上下文进行来自不同上下文的访问控制决定。


核心方法:


大致理解

类 java.security.AccessController 是提供了一个默认安全策略执行机制,在线程调用方法时,会使用栈检查决定潜在不安全操作是否被允许。AccessController 核心方法是 checkPermission 静态方法,方法决定一个特定的操作能否被允许。如果访问请求被允许,checkPermission 会安静的返回,如果拒绝,将会抛出一个 AccessControlException。


参考:

https://blog.csdn.net/ioteye/article/details/109921371

JDK 帮助文档

发布于: 刚刚阅读数: 2
用户头像

Nick

关注

终身学习,向死而生 2020.03.18 加入

得到、极客时间重度学习者,来infoQ 是为了输出倒逼输入

评论

发布
暂无评论
druid源码学习五-AccessController探索_Druid_Nick_InfoQ写作社区