许多Java框架允许将用于注入的类成员声明为非公共的.例如,Spring和EJB 3中的注入变量可以是私有的. JPA允许保护持久性类的属性或将其私有化.
我们知道,如果可以的话,最好将方法声明为非公共方法.话虽如此,如果我没记错的话,允许这些框架访问非公共成员仅适用于默认的Java安全管理器.难道不是自定义代码还可以通过调用setAccessible()通过反射来获得对非公共成员的访问权限,这将损害安全性?
哪个问题提出了这个问题:设置注射方法的访问级别时的最佳实践是什么?
最佳答案
通常,一个类需要选择加入持久性机制.例如,Java serialisatoin需要一个类来实现java.io.Serializable.实现Serializable的类有责任确保它们的安全.如果某个库允许通过外部配置文件戳私有,则不应信任它-反射确实很危险,其使用通常很混乱.
当然,如果您确实发现了漏洞,请向相应的小组报告.