Java 7u40 Java SE 8 sun.reflect.Reflection.getCallerClass [关闭]

2024-02-14

我已阅读以下帖子

Oracle 停止 sun.reflect.Reflection.getCallerClass http://www.infoq.com/news/2013/07/Oracle-Removes-getCallerClass

我想知道这个变化到底意味着什么。

1)。意味着此类 sun.reflect.Reflection.getCallerClass 将被重写以提供更多安全性Java reflection?

2)。意味着不再需要这个课程了吗?也许另一种方法?

3)。 Java 8中反射将结束。method.invoke将抛出UnsupportedOperationException。?

4).这会影响与 Spring 或 AspectJ 面向方面编程相关的任何内容吗?

我想知道因为我们使用反射method.invoke在发送到数据库之前向类提供一些标志。如果反思是关于我可以使用什么方法来提供我的上述行为,这就提出了另一个问题。我认为 AOP 是一种可行的方法。

多谢。


简短的回答:您只需担心use sun.reflect.Reflection.getCallerClass。 (并且建议 Java 反射被撤销是可笑的。)

更长的答案是,该方法提供的功能正在 JEP 176 中重新设计。旧方法实际上正在被删除......而不仅仅是弃用。它是一个方法中的sun.*树,应用程序代码不应直接调用它。目前的计划似乎是:

  • 如果无法识别有效用例,则完全删除此功能,或者

  • 提供替代 API,或者至少推迟从 Java 7 中硬删除当前方法


这个私有 API 最初的主要用例是供安全管理员等需要知道谁调用了他们的人使用。不幸的是,这种方法已被证明是脆弱的。已经设计了解决该问题的新方法(使用消息句柄)。他们决定强制解决这个问题,而不是让应用程序代码随意使用此 API 来达到可疑目的。

然而,这个问题有被抵制的迹象,因为它导致了 Groovy 和 JRuby 等产品的损坏。

参考:

  • 此消息线程:http://www.mail-archive.com/[电子邮件受保护]/msg05325.html http://www.mail-archive.com/mlvm-dev@openjdk.java.net/msg05325.html

您的具体问题:

1)。是否意味着该类 sun.reflect.Reflection.getCallerClass 将被重写以在 Java 反射中提供更多安全性?

往上看。我怀疑这样做有与安全相关的动机。

UPDATE- 这证实了这一点:https://partners.immunityinc.com/idocs/Java%20MBeanInstantiator.findClass%200day%20Analysis.pdf https://partners.immunityinc.com/idocs/Java%20MBeanInstantiator.findClass%200day%20Analysis.pdf

2)。意味着不再需要这个课程了吗?也许另一种方法?

往上看。他们尚未确定是否需要该功能。

3)。 Java 8中反射将结束。method.invoke将抛出UnsupportedOperationException。?

这两个都不是。这只是关于特定类的特定方法sun.*包。

它不会影响一般的反射或method.invoke().

4).这会影响与 Spring 或 AspectJ 面向方面编程相关的任何内容吗?

可能不会。只有当这些技术依赖于该特定方法时,它才会受到影响。如果他们这样做,那么各自的库维护者将需要确保 Java 团队了解需要这样做的用例。我想维护人员正在跟踪这一点。

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

Java 7u40 Java SE 8 sun.reflect.Reflection.getCallerClass [关闭] 的相关文章

随机推荐