1.module
模块
此片段说明了模块的作用.
模块, Java9 开始引入的一个新的系统
- 模块可以定义其他模块可以访问该模块的什么东西
- 该模块的东西有什么不能被访问
- 模块权限控制是包级别
为了更好的明白该文章是如何进行越权的, 我们会先给出一个例子, 便于理解
- 假设有一个模块
protectedprotected0.Class0protected0.Class1protected0.Class2protected1.Class1
- 有另外一个模块
hacker - 模块
protectedexport 了protected0这个包给了hackerhacker可以随便访问并使用protected0这个包的内容hacker依然没有protected1的访问权, 但是hacker不需要protected1的任何内容
- 如果模块
protected并没有 exportprotected0给hacker- 那么
hacker访问protected0就会得到一个java.lang.IllegalAccessError
- 那么
此时…
hacker就是module UnsafeAccessorprotected就是module java.baseprotected0就是jdk.internal.access
模块的划分
在同一个 ClassLoader 下
假设有以下模块
module m1package m1.m1package m1.m2
module m2package m2.m1package m2.m2
当往该 ClassLoader define 一个 Class 的时候, 会自动划分 module.
- 如果包名是
m1.m1-> 归module m1 - 如果包名是
m1.m2-> 归module m1 - .
- 如果包名是
m2.m1-> 归module m2 - 如果包名是
m2.m2-> 归module m2 - …..
- 该class归
ClassLoader#getUnnamedModule()
