我咨询了线程的源代码,发现了这个:
public final void checkAccess() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkAccess(this);
}
}
SystemSecurityManager
默认执行什么操作,或者系统相关的操作是什么,这不是标准化的。事实上,如果一个线程试图中断另一个线程,我应该发生什么呢?如果我自己不覆盖checkAccess方法,会抛出SecurityException
吗?
答案 0 :(得分:2)
安全管理器是一个允许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作为默认系统安全管理器,其中可以允许每个操作,或者您可以将策略文件指定给允许所有操作的默认安全管理器。