全局并最终存储安全管理器的检查是否可以接受?
给定以下代码行:
public static final boolean SEC_ON = (System.getSecurityManager() != null);
将其放在库中并在JVM的整个生命周期中重用结果是否可以接受?
为什么?或者为什么不呢?
[update]类似的代码存在于Java EE-JSP规范的参考实现中。任何使用它的应用程序服务器/servlet容器都不支持SecurityManager的动态配置。
否。如果安全管理器最初不存在,则可以随时安装。
由于安全管理器可以在JVM的生命周期中随时更改,因此这不是一个好的做法。如果他们需要一个方便快捷方式,他们应该使用这样的方法:
public static boolean isSecurityOn() {
return (System.getSecurityManager() != null);
}
在就主题向Java EE用户组请愿后(https://java.net/projects/javaee-spec/lists/users/archive/2013-08/message/8)看来,他们的立场是不就这样做是否可以做出任何这样的决定。
因此,可悲的是,尽管我们可能希望答案是"你不应该那样做",但现实是,你不能依赖这种假设,因为有人现在和可能会继续这样做