【问题标题】:What does SystemSecurityManager do by default?SystemSecurityManager 默认做什么?
【发布时间】:2015-09-11 11:36:57
【问题描述】:

我查阅了线程的源代码,发现是这样的:

public final void checkAccess() {
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
        security.checkAccess(this);
    }
}

SystemSecurityManager 默认是做什么的,或者它是一个依赖于系统的东西,这不是标准化的。事实上,如果一个线程试图中断另一个线程,我应该期待发生什么?如果我自己不重写 checkAccess 方法,SecurityException 会被抛出吗?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    安全管理器是一个类,它允许 Java 应用程序允许在其代码库中可以做什么和不可以做什么。

    安全管理器的一个常见用途是禁止 jvm 中的代码访问系统属性(如果在沙箱中运行)、进行 http 调用或在底层文件系统上创建文件。

    由于 SecurityManager 是可配置的,因此很难在默认情况下定义它的功能,即使它位于同一平台上,因为尽管事实上安全管理器是一个标准化d ,即使对于同一个应用程序实例,您也可以有许多配置和配置选项。您可以通过提供不同的安全管理器政策文件来启动您的应用程序,该文件可能会极大地影响您的应用程序的行为方式。

    一种常见的做法是通过提供一个文件来配置安全管理器:

    http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

    我不得不说,在我 7 年的 Java 经验中,我只在 jvm 在沙箱中运行时处理过安全管理器和策略文件。然而,有趣的是,Android jvm 也有一个安全管理器,这似乎不是执行安全策略的推荐方式:http://developer.android.com/reference/java/lang/SecurityManager.html

    另外,检查这个 SO 答案: Java Security Manager - What does it check?

    简而言之:

    安全管理器是众所周知的事情。它可以配置一个策略文件,该文件确定它的行为方式,因此当您不覆盖其 checkAccess 方法时,它可以或不能基于此策略文件引发异常。因此,为了确保您允许所有操作,您可以将 permitAllSecurityManager 作为默认系统安全管理器,允许所有操作,或者您可以为默认安全管理器指定允许所有操作的策略文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多