什么是非法反射访问?

2024-02-12

Java 9 中存在很多关于非法反射访问的问题。

我发现了很多关于解决错误消息的讨论,但我很想知道非法反射访问实际上是什么。

所以我的问题是:

什么定义了非法反射访问以及什么情况会触发警告?

我认为它与 Java 9 中引入的封装原则有关,但我找不到关于它们如何组合在一起、什么触发警告以及在什么情况下的解释。


除了了解模块及其各自包之间的访问之外。我相信问题的关键在于模块系统#宽松强封装 http://openjdk.java.net/jeps/261#Relaxed-strong-encapsulation我会挑选其中的相关部分来尝试回答这个问题。

什么定义了非法反射访问以及什么情况 触发警告?

为了帮助迁移到 Java-9,可以放松模块的强封装。

  • 一个实现可以提供静态访问,即通过编译的字节码。

  • 可以提供一种方法来调用其运行时系统,其中一个或多个模块的一个或多个包对代码开放所有未命名的模块,即在类路径上编码。如果以这种方式调用运行时系统,并且通过这样做,反射 API 的某些调用会成功,否则它们会失败。

在这种情况下,你实际上最终做了一个反思性访问这是“非法的”因为在纯粹的模块化世界中,您不应该进行此类访问。

这一切是如何结合在一起的以及什么会触发警告 设想?

这种封装的放松是在运行时由新的启动器选项控制的--illegal-access在 Java 9 中默认等于permit. The permit模式确保

对任何此类包的第一个反射访问操作都会导致 发出警告,但此后不再发出警告。 此单个警告描述了如何启用进一步的警告。这 警告无法被抑制。

模式可通过值进行配置debug(每次此类访问的消息以及堆栈跟踪),warn(每个此类访问的消息),以及deny(禁用此类操作)。


应用程序上需要调试和修复的几件事是:-

  • 运行它--illegal-access=deny了解并避免open将包从一个模块转移到另一个模块,而无需包含此类指令的模块声明(opens)或明确使用--add-opens VM arg.
  • 可以使用以下命令来识别从已编译代码到 JDK 内部 API 的静态引用jdeps工具与--jdk-internals option

非法反射访问操作时发出的警告消息 检测到的具有以下形式:

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM

where:

$PERPETRATOR是包含以下类型的完全限定名称 调用相关反射操作的代码加上代码 源(即 JAR 文件路径)(如果可用),以及

$VICTIM是一个描述正在访问的成员的字符串, 包括封闭类型的完全限定名称

对于此类示例警告的问题:=JDK9:发生了非法反射访问操作。 org.python.core.PySystemState https://stackoverflow.com/questions/46230413/jdk9-an-illegal-reflective-access-operation-has-occurred-org-python-core-pysys

最后一点也是重要的一点,在努力确保您不会面临此类警告并确保未来安全的同时,您所需要做的就是确保您的模块不会进行这些非法反射访问。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是非法反射访问? 的相关文章

随机推荐

  • 如何以编程方式在 sitecore 中设置 Treelist 的值

    我有一个职位描述页面 我正在以编程方式向其添加值 其中一个字段是 Office Locations 数据类型为 Treelist 如何将值添加到树列表以便我可以设置办公位置 Sitecore Treelist以管道分隔形式存储所选项目的 i
  • 使用部署槽部署Azure Functions时如何避免主机重启?

    我将管道配置为对 Azure Functions 进行零停机时间部署 为此 我采取了以下步骤 创建槽 部署到插槽 开始交换预览 完成交换 我对此过程的理解是 所有重新启动都应该仅在预览槽上发生 因此只有 JobHost 应该重新启动 并且这
  • 使用 JPA 和 Hibernate 注册 SQL 函数

    我想知道最好的方法是什么使用 JPA Hibernate 注册自定义 SQL 函数 我是否必须扩展 MysqlInnodb 方言还是有更好的方法 任何人都可以提供代码示例和相关文档的指针吗 您可能会阅读一些文章 告诉您通过扩展 Hibern
  • 使用keras加载模型并为其参数分配新值

    我正在尝试使用 keras 存储模型 然后加载它以重新训练 我的问题是加载模型时如何将学习率设置为新值 这是我的代码 Save a model model Sequential model add Dense 64 kernel initi
  • 绘制自定义组件

    这是两个问题 1 是最重要的paint的成员Component使用代号为 1 的简单 2D 图形游戏的最佳方法是什么 或者我什至不应该尝试它 2 为什么下面的代码会画出我的Component只是立即删除它 我像这样初始化我的组件 prote
  • 实体框架 ORA-00932:不一致的数据类型:“'预期 CLOB 为 CHAR”

    Oracle ManagedDataAccess EntityFramework 6 122 1 0 库用于从 MVC ASP Net 应用程序访问 Oracle 数据库 这是截至 2017 年 11 月 14 日来自 NuGet 的最新库
  • 在C程序中,是否可以将所有全局变量重置为默认值?

    我有一个旧版 C Linux 应用程序需要重用 该应用程序使用了很多全局变量 我想重用该应用程序的主要方法并在循环中调用它 我发现当我在循环中调用 main 方法 重命名为 callableMain 时 应用程序行为不一致 因为先前迭代中设
  • 从 HTML 创建自动化、严格设计的多页 PDF 报告 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有哪些基于 Python 的优秀选项可以从 HTML 创建严格设计的 PDF 报告 我附上了 PDF
  • 将base64图像发布到android中的php服务器

    我正在开发一个模块 用户可以在其中将图像上传到服务器 为此 我必须将所选图像更改为 Base64 转换后 我必须使用 Json POST 方法上传图像 但每次应用程序崩溃并且 Logcat 都会出现此错误 Error converting
  • 如何设置 ReSharper 默认公司和版权?

    我刚刚安装了 Stylecop 4 5RC 和 ReSharper 当我创建一个新类时 我发现我现在是合规的 耶 但我希望该公司是我的公司 而不是 Microsoft 我还有太多事情要做 不必担心更新版权文本 默认情况下如何填写这些
  • Gradle 扩展:对于具有简单值的属性,可以使用普通 Kotlin 类型代替 Property 吗?

    The Gradle 文档用于惰性配置 https docs gradle org current userguide lazy configuration html指出在扩展 DSL 类中 诸如var someProperty defau
  • 无法在android中连接websocket和wss

    我正在尝试使用 org java websocket client WebSocketClient API 在 android 中连接安全 websocket 连接 wss 但无法与 https 连接 然而它与 ws 这是我的代码 priv
  • 如何旋转 pyplot.table 中的列标题?

    我正在 matplotlib 中创建一个表 但表头是长字符串 表值是只有几位数字的数字 这给我留下了两个不好的选择 要么我的表格比必要的宽得多 要么我的标题重叠 为了解决这个问题 我想旋转表格标题 可能最多 90 度 换句话说 我想做thi
  • 使用存储过程作为业务逻辑层

    我工作的公司目前正在使用存储过程 在 MsSQL 服务器后端 作为其业务逻辑层 实际的业务逻辑 DLL 仅调用 sProcs 并基本上管理 UI 事件 数据绑定等 我认为设置有问题 尽管我不确定如何向同事解释 顺便说一句 该系统有效 我工作
  • Laravel 8 错误类“App\User”未找到

    我的 auth php 文件 providers gt users gt driver gt eloquent model gt App Models User class 用户控制器文件
  • 使用 python 带有自签名证书的 ssl

    我正在尝试使用我的自签名证书在 python 中构建一个简单的服务器 我使用 makecert 创建了 cer pfx pvk 文件 context ssl create default context ssl Purpose CLIENT
  • C++ 中的彩色输出

    有没有办法使用打印彩色输出iostream和Xcode 例如 我希望能够打印Hello World with Hello red World蓝色和 黄色的 我怎样才能做到这一点 您需要终端颜色代码 对于 Linux 如下 您的系统可能有所不
  • 使用 iTextSharp 阅读 PDF 时出现奇怪的字符

    我正在使用 iTextSharp 来阅读 PDF 文件 我尝试使用以下简单的代码阅读第一页中的全文 var pdfReader new PdfReader
  • 如何实现递归依赖于自身的反应式香蕉行为?

    我有一个行为 我想根据事件的发生和行为的当前值来更改其值 在下面的示例中 我有两个计数器 它们根据布尔行为是 True 还是 False 进行更新 事实上 这段代码崩溃了 lt
  • 什么是非法反射访问?

    Java 9 中存在很多关于非法反射访问的问题 我发现了很多关于解决错误消息的讨论 但我很想知道非法反射访问实际上是什么 所以我的问题是 什么定义了非法反射访问以及什么情况会触发警告 我认为它与 Java 9 中引入的封装原则有关 但我找不