java安全管理器是不是可以在安装级别默认启用?
Posted
技术标签:
【中文标题】java安全管理器是不是可以在安装级别默认启用?【英文标题】:Can java security manager be enabled by default at the installation level?java安全管理器是否可以在安装级别默认启用? 【发布时间】:2016-03-05 09:54:39 【问题描述】:据了解,可以使用反射来操纵 final
关键字的一般概念。
也可以使用安全管理器来防止这种情况发生。
是否可以默认启用安全管理器(在 jdk 安装级别)?
参考资料:
Change private static final field using Java reflection Running Java Security Manager without the default java.policy file更新 1:
鉴于它需要启用才能工作,它不太可能。
我得到的最接近的方法是将System.setSecurityManager(new SecurityManager())
放置在类的静态块中,将其捆绑为 jar 并将其放置在 'jre/lib/ext' 中,结果发现它默认未加载,我们仍然需要使用 Class.forName。
因此,即便如此,唯一的选择是使用-Djava.security.manager
标志或以编程方式添加。
【问题讨论】:
【参考方案1】:您可以使用 _JAVA_OPTIONS 环境变量设置默认 Java 系统属性,因此您可以在系统上设置 _JAVA_OPTIONS="-Djava.security.manager"
,这将确保所有 Java 进程都将在启用安全管理器的情况下运行。
当然,此变量可能会被覆盖,因此根据您的环境,它可能不够安全。
如果您试图确保不能使用反射覆盖特定类的最终成员,另一种选择是在该类中放置一个静态初始化块,以检查是否安装了安全管理器并抛出一个如果不是,SecurityException。
【讨论】:
猜猜看。我想要达到的是避免必须依赖编程方法,因为这依赖于加载的类本身,这不一定能保证。这就是为什么我正在寻找一个可以保证并适用于整个 JVM 并且最好是不可逆的选项的原因(即安全管理器一旦安装就不应被卸载)。不过感谢您的回答。以上是关于java安全管理器是不是可以在安装级别默认启用?的主要内容,如果未能解决你的问题,请参考以下文章