Ced*_*tin 9 java security securitymanager
使用SecurityManager时是否存在性能损失?
我需要以下内容:
public class ExitHelper {
public ExitHelper() {
System.setSecurityManager(new ExitMonitorSecurityManager());
}
private static class ExitMonitorSecurityManager extends SecurityManager {
@Override
public void checkPermission(Permission perm) {}
@Override
public void checkPermission(Permission perm, Object context) {}
@Override
public void checkExit( final int status ) {
// this is the part I need and I don't care much about the performance issue of this method
}
}
Run Code Online (Sandbox Code Playgroud)
这会对我的计划产生巨大影响吗?
例如,该程序确实打开了很多文件.如果我启用SecurityManager并在那里放入一些日志,我可以调用这些方法.真的很多.在这两种方法的记录中丢失了正常的日志记录.因此,将SecurityManager置于适当的位置意味着可以进行大量的调用.它会比默认的SecurityManager慢吗?(默认情况下有吗?)
这是如何运作的?将检查程序的哪个部分的权限和频率?我关注两个checkPermission(...)方法.
存在性能损失,但可能很小,因为:
特别要注意的是,安全检查的调用代码在Java库代码中通常非常轻量级,例如:
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkXXX(argument, . . . );
}
Run Code Online (Sandbox Code Playgroud)
如果您的安全管理器代码本身同样轻量级,那么安全检查的运行时成本应该可以忽略不计.我会避免在SecurityManager本身中放入任何日志记录代码 - 这将是昂贵的,并且可能属于应用程序代码中的更高级别.
如果您希望绝对最小化安全管理器对您不关心的权限的开销,那么您应该使用以下内容覆盖您不需要的特定checkXXX方法:
@Override
public void checkRead(String file) {
// empty method as we are happy to allow all file reads
}
Run Code Online (Sandbox Code Playgroud)
最终你必须根据你的具体情况进行基准测试,但"直觉"的答案是你不应该真的担心它.
| 归档时间: |
|
| 查看次数: |
1953 次 |
| 最近记录: |