Java:将私有成员字段设置为可访问的危险?

时间:2012-02-22 19:46:52

标签: java security

要设置私有Field的值,需要将其标记为可访问:

field.setAccessible(true);

SecurityManager什么时候不允许这样?将它包含在库中有多便携?导入某些情境时会失败吗?

2 个答案:

答案 0 :(得分:5)

如果您知道您的库不会在启用了安全管理器的JVM中使用,例如applet或安全的应用程序服务器,那么就可以了。但如果可能的话,我会尽量避免使用它。

其他答案如this link表明使用它没有问题。因此,如果您认为这是最好的方法,而其他选项太麻烦或者根本不存在,那就继续吧。

答案 1 :(得分:0)

  

SecurityManager什么时候不允许这样做?

javadoc说:

  

首先,如果有安全管理器,则使用ReflectPermission("suppressAccessChecks")权限调用其checkPermission方法。

     

如果flag为true,则引发SecurityException但此对象的可访问性可能不会更改(例如,如果此元素对象是类Constructor的{​​{1}}对象)。

关于你的另一个问题

  

将它包含在库中有多便携?导入某些情境时会失败吗?

它可以跨JVM实现移植,因为Class在核心库中使用这些语义定义。它不能跨实例移植,因为不同的JVM实例可能具有不同配置的安全策略。