【发布时间】:2016-07-25 21:59:38
【问题描述】:
我阅读了以下有关 Java 反射的文章:
https://community.oracle.com/docs/DOC-983192
在其中,作者描述了如何通过反射来改变对象字段的值。他解释了如何做到这一点,即使该字段具有私有访问权限。
我在回来的时候读了 Joshua Block 的书:“Effective Java”。在那里,他说,为了防止对对象的字段、方法等的不安全访问,只要有可能,我们应该给字段和方法提供最严格的修饰符(即,尽可能私有、公共或受保护,如果它是暴露的api)。
我的问题如下:
如果无论如何都可以通过反射访问敏感信息,为什么还要设计你的类以不暴露敏感信息?
(实际上,我是在询问我缺少的信息来理解这个主题)
【问题讨论】:
-
将字段标记为私有或受保护对于让您的库或 API 的用户知道他们应该如何使用(或不使用)该字段大有帮助。这不仅仅是安全问题。
-
私有化就像在电源插座上盖上绝缘盖:它向人们表明您希望他们如何使用它;但这并不能阻止有人拧开前面并触摸火线。
-
也可以使用 SecurityManager 来防止反射修改。见stackoverflow.com/questions/7566626/…
标签: java oop reflection