Illegal Reflective Access in Java 9: A Detailed Examination
Java 9 introduced the concept of illegal reflective access,引发了 zahlreichen关于如何解决此错误消息的疑问。本文将深入探讨非法反射访问的本质,触发警报的情况以及可能的解决方案。
Java 9 中的模块系统引入了模块化#放松强封装的概念,这是理解非法反射访问的关键。模块中代码对其他模块代码和可见包的访问受到严格的控制。然而,为了 облегчить переход на Java 9,模块的强封装可以被放松。
runtime系统可以提供以下操作:
- 静态访问: 通过编译后的字节码提供。
- 运行时调用: 允许调用其运行时系统,并将一个或多个模块的一个或多个包作为所有未命名模块中的代码打开。
非法访问的概念
如果在以下情况下使用反射 API 成功调用,则会触发“非法”的反射访问:
- 通常情况下调用会失败。
- 运行时系统已启用“非法访问”。
触发警报的机制
Java 9 中封装的放松可以通过新的启动选项 --illegal-access 在编译时进行控制。默认情况下,此选项设置为“允许”。在这种模式下,第一次对任何此类包的反射访问操作将触发警报,但此后不再发出警告。此警告包含有关如何启用进一步警告的信息。
配置选项
--illegal-access 选项可以配置为以下模式:
- debug:为每次此类访问打印消息和堆栈跟踪。
- warn:为每次此类访问打印消息。
- deny:禁用此类操作。
调试和修复建议
- 使用 --illegal-access=deny 运行应用程序以找出并避免在没有任何模块声明(包括此类指令的 opens)或显式使用 --add-opens VM 参数的情况下,从一个模块向另一个模块“打开”包。
- 使用 jdeps 工具和 --jdk-internals 选项识别编译代码中对 JDK 内部 API 的静态引用。
警告消息示例
非法反射访问操作检测到时发出的警告消息遵循以下格式:
WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM
其中:
- $PERPETRATOR:包含触发反射操作的代码的类型的限定名称,以及可用的代码源(即 JAR 文件路径)。
- $VICTIM:描述所访问成员的字符串,包括封闭类型的限定名称。
预防措施
为了避免此类警告并确保将来的安全性,需要确保模块不会进行这些非法反射访问。
以上是如何解决 Java 9 中的'非法反射访问”警告?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中