JavaTM 2 Platform
Standard Ed. 6

java.lang
類別 SecurityManager

java.lang.Object
  繼承者 java.lang.SecurityManager
直接已知子類別:
RMISecurityManager

public class SecurityManager
extends Object

安全管理器是一個允許應用程序實作安全策略的類別。它允許應用程序在執行一個可能不安全或敏感的操作前確定該操作是什麼,以及是否是在允許執行該操作的安全上下文中執行它。應用程序可以允許或不允許該操作。

SecurityManager 類別包含了很多名稱以單詞 check 開頭的方法。Java 資源庫中的各種方法在執行某些潛在的敏感操作前可以調用這些方法。對 check 方法的典型調用如下:

     SecurityManager security = System.getSecurityManager();
     if (security != null) {
         security.checkXXX(argument,  . . . );
     }
 

因此,安全管理器通過拋出異常來提供阻止操作完成的機會。如果允許執行該操作,則安全管理器例程只是簡單地返回,但如果不允許執行該操作,則拋出一個 SecurityException。該約定的唯一例外是 checkTopLevelWindow,它返回 boolean 值。

當前的安全管理器由 System 類別中的 setSecurityManager 方法設置。當前的安全管理器由 getSecurityManager 方法獲得。

特殊方法 checkPermission(java.security.Permission) 確定是應該允許還是拒絕由指定權限所指示的存取請求。預設的實作調用

   AccessController.checkPermission(perm);
 

如果允許存取請求,則安靜地返回 checkPermission。如果拒絕存取請求,則拋出 SecurityException

從 Java 2 SDK v1.2 開始,SecurityManager 中其他所有 check 方法的預設實作都是調用 SecurityManager checkPermission 方法來確定調用執行緒是否具有執行所請求操作的權限。

注意,只帶有單個權限參數的 checkPermission 方法總是在當前執行的執行緒上下文中執行安全檢查。有時,應該在給定上下文中進行的安全檢查實際上需要在不同 的上下文(例如,在一個輔助執行緒中)中進行。Java 為這種情況提供了包含有上下文參數的 getSecurityContext 方法和 checkPermission 方法。getSecurityContext 方法返回當前調用上下文的一個“快照”(預設的實作返回一個 AccessControlContext 物件)。下面是一個範例調用:

   Object context = null;
   SecurityManager sm = System.getSecurityManager();
   if (sm != null) context = sm.getSecurityContext(); 
 

checkPermission 方法使用一個上下文物件,以及根據該上下文而不是當前執行執行緒的上下文作出存取決策的權限。因此另一個上下文中的程式碼可以調用此方法,傳遞權限和以前保存的上下文物件。下面是一個範例調用,它使用了以前範例中獲得的 SecurityManager sm

   if (sm != null) sm.checkPermission(permission, context);
 

權限分為以下類別別:檔案、Socket、網路、安全性、運行時、屬性、AWT、反射和可序列化。管理各種權限類別別的類別是 java.io.FilePermissionjava.net.SocketPermissionjava.net.NetPermissionjava.security.SecurityPermissionjava.lang.RuntimePermissionjava.util.PropertyPermissionjava.awt.AWTPermissionjava.lang.reflect.ReflectPermissionjava.io.SerializablePermission

除前兩個(FilePermission 和 SocketPermission)類別以外的全部類別都是 java.security.BasicPermission 的子類別,而 java.security.BasicPermission 類別又是頂級權限類別 java.security.Permission 的抽象子類別。BasicPermission 定義了所有權限所需的功能,這些功能的名稱遵從分層屬性命名慣例(例如“exitVM”、“setFactory”、“queuePrintJob”等等)。在名稱的末尾可能出現一個星號,前面是“.”或星號,這表示通配符比對。例如:“a.*”、“*”是有效的,而“*a”或“a*b”是無效的。

FilePermission 和 SocketPermission 是頂級權限類別 (java.security.Permission) 的子類別。像這些命名語法比 BasicPermission 所用的語法更為複雜的類別都直接是 Permission 的子類別,而不是 BasicPermission 的子類別。例如,對於 java.io.FilePermission 物件而言,權限名就是檔案(或目錄)的路徑名。

某些權限類別具有一個“動作”列表,告知允許物件所執行的動作。例如,對於 java.io.FilePermission 物件,動作列表(如“讀、寫”)指定了允許對指定檔案(或指定目錄中的檔案)執行哪些動作。

其他權限類別是“指定的”權限 - 有名稱但沒有動作列表的類別;您也許有指定的權限,也許沒有。

註:還有一個暗指所有權限的 java.security.AllPermission 權限。該權限是為了簡化系統管理員的工作而存在的,因為管理員可能需要執行很多需要所有(或許多)權限的任務。

有關權限相關的資訊,請參閱 。例如,本文檔包括一個列出各種 SecurityManager 的 check 方法和每個方法的預設實作所需的權限表。它還包含了版本 1.2 方法所需權限和每個方法需要哪些權限的表。

有關 JDK 中對 SecurityManager 所作更改的更多資訊和關於 1.1 樣式安全管理器移植的建議,請參閱 security documentation

從以下版本開始:
JDK1.0
另請參見:
ClassLoader, SecurityException, checkTopLevelWindow, getSecurityManager, setSecurityManager, AccessController, AccessControlContext, AccessControlException, Permission, BasicPermission, FilePermission, SocketPermission, PropertyPermission, RuntimePermission, AWTPermission, Policy, SecurityPermission, ProtectionDomain

欄位摘要
protected  boolean inCheck
          已過時。 建議不使用該型別的安全檢查。建議使用 checkPermission 調用。
 
建構子摘要
SecurityManager()
          建構一個新的 SecurityManager
 
方法摘要
 void checkAccept(String host, int port)
          如果不允許調用執行緒從指定的主機和埠號號接受Socket連接,則拋出 SecurityException
 void checkAccess(Thread t)
          如果不允許調用執行緒修改 thread 參數,則拋出 SecurityException
 void checkAccess(ThreadGroup g)
          如果不允許調用執行緒修改執行緒組參數,則拋出 SecurityException
 void checkAwtEventQueueAccess()
          如果不允許調用執行緒存取 AWT 事件佇列,則拋出 SecurityException
 void checkConnect(String host, int port)
          如果不允許調用執行緒打開到指定主機和埠號號的Socket連接,則拋出 SecurityException
 void checkConnect(String host, int port, Object context)
          如果不允許指定的安全上下文打開與指定主機和埠號號的Socket連接,則拋出 SecurityException
 void checkCreateClassLoader()
          如果不允許調用執行緒創建新的類別載入器,則拋出 SecurityException
 void checkDelete(String file)
          如果不允許調用執行緒刪除指定的檔案,則拋出 SecurityException
 void checkExec(String cmd)
          如果不允許調用執行緒創建一個子進程,則拋出 SecurityException
 void checkExit(int status)
          如果不允許調用執行緒使用特定的狀態碼暫停 Java 虛擬機器,則拋出 SecurityException
 void checkLink(String lib)
          如果不允許調用執行緒動態連接由字元串參數檔案指定的資源庫程式碼,則拋出 SecurityException
 void checkListen(int port)
          如果不允許調用執行緒等待與指定本地埠號號進行連接的請求,則拋出 SecurityException
 void checkMemberAccess(Class<?> clazz, int which)
          如果不允許調用執行緒存取程序,則拋出 SecurityException
 void checkMulticast(InetAddress maddr)
          如果不允許調用執行緒使用(加入/離開/發送/接收)IP 多址廣播,則拋出 SecurityException
 void checkMulticast(InetAddress maddr, byte ttl)
          已過時。 由 #checkPermission(java.security.Permission) 取代
 void checkPackageAccess(String pkg)
          如果不允許調用執行緒存取由參數指定的套件,則拋出 SecurityException
 void checkPackageDefinition(String pkg)
          如果不允許調用執行緒在參數指定的套件中定義類別,則拋出 SecurityException
 void checkPermission(Permission perm)
          如果基於當前有效的安全策略,不允許執行根據給定權限所指定的請求存取,則拋出 SecurityException
 void checkPermission(Permission perm, Object context)
          如果拒絕指定的安全上下文存取由給定權限所指定的資源,則拋出 SecurityException
 void checkPrintJobAccess()
          如果不允許調用執行緒發起一個列印作業請求,則拋出 SecurityException
 void checkPropertiesAccess()
          如果不允許調用執行緒存取或修改系統屬性,則拋出 SecurityException
 void checkPropertyAccess(String key)
          如果不允許調用執行緒存取具有指定的 key 名的系統屬性,則拋出 SecurityException
 void checkRead(FileDescriptor fd)
          如果不允許調用執行緒從指定的檔案描述符進行讀取,則拋出 SecurityException
 void checkRead(String file)
          如果不允許調用執行緒讀取由字元串參數指定的檔案,則拋出 SecurityException
 void checkRead(String file, Object context)
          如果不允許指定的安全上下文讀取由字元串參數所指定的檔案,則拋出 SecurityException
 void checkSecurityAccess(String target)
          確定是應該允許還是拒絕具有指定權限目標名的權限。
 void checkSetFactory()
          如果不允許調用執行緒設置由 ServerSocketSocket 使用的Socket處理器,或者由 URL 使用的串流處理程序處理器,則拋出 SecurityException
 void checkSystemClipboardAccess()
          如果不允許調用執行緒存取系統剪貼板,則拋出 SecurityException
 boolean checkTopLevelWindow(Object window)
          如果不受信任的調用執行緒調出由 window 參數指出的頂層視窗,則返回 false
 void checkWrite(FileDescriptor fd)
          如果不允許調用執行緒寫入指定的檔案描述符,則拋出 SecurityException
 void checkWrite(String file)
          如果不允許調用執行緒寫由字元串參數指定的檔案,則拋出 SecurityException
protected  int classDepth(String name)
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
protected  int classLoaderDepth()
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
protected  ClassLoader currentClassLoader()
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
protected  Class<?> currentLoadedClass()
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
protected  Class[] getClassContext()
          以類別陣列的形式返回當前執行堆疊(stack)空間。
 boolean getInCheck()
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
 Object getSecurityContext()
          創建一個封裝當前執行環境的物件。
 ThreadGroup getThreadGroup()
          調用此方法時,返回所有新創建的執行緒實例化後所在的執行緒組。
protected  boolean inClass(String name)
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
protected  boolean inClassLoader()
          已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

inCheck

@Deprecated
protected boolean inCheck
已過時。 建議不使用該型別的安全檢查。建議使用 checkPermission 調用。
如果安全檢查正在進行,則該欄位為 true;否則為 false

建構子詳細資訊

SecurityManager

public SecurityManager()
建構一個新的 SecurityManager

如果已經安裝了一個安全管理器,則此方法首先用 RuntimePermission("createSecurityManager") 權限調用此安全管理器的 checkPermission 方法,確保調用執行緒具有創建新安全管理器的權限。這可能導致拋出 SecurityException

拋出:
SecurityException - 如果安全管理器已存在,並且其 checkPermission 方法不允許創建新安全管理器。
另請參見:
System.getSecurityManager(), checkPermission, RuntimePermission
方法詳細資訊

getInCheck

@Deprecated
public boolean getInCheck()
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

測試安全檢查是否正在進行。

返回:
inCheck 欄位的值。如果安全檢查正在進行,則該欄位應該為 true,否則應該為 false
另請參見:
inCheck

getClassContext

protected Class[] getClassContext()
以類別陣列的形式返回當前執行堆疊(stack)空間。

陣列的長度是執行堆疊(stack)空間中的方法數。索引 0 指定的元素是當前執行方法的類別,索引 1 指定的元素是該方法調用方的類別,依此類別推。

返回:
執行堆疊(stack)空間。

currentClassLoader

@Deprecated
protected ClassLoader currentClassLoader()
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

返回最近執行的、使用非系統類別載入器定義的類別方法的類別載入器。非系統類別載入器被定義為一種不同於系統類別載入器(由 ClassLoader.getSystemClassLoader() 返回)或其祖先之一的類別載入器。

在以下三種情況中,此方法將返回 null

  1. 執行堆疊(stack)空間中的所有方法都來自於使用系統類別載入器或其祖先之一所定義的類別。
  2. 在執行堆疊(stack)空間中,直到第一個“特權”調用方(參見 AccessController.doPrivileged(java.security.PrivilegedAction))為止的所有方法都來自於使用系統類別載入器或其祖先之一所定義的類別。
  3. 使用 java.security.AllPermission 調用 checkPermission 不會導致 SecurityException。

返回:
最近執行的、使用非系統類別載入器定義的類別方法堆疊(stack)空間中的類別載入器。
另請參見:
getSystemClassLoader, checkPermission

currentLoadedClass

@Deprecated
protected Class<?> currentLoadedClass()
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

返回最近執行的、使用非系統類別載入器定義的類別方法的類別。非系統類別載入器被定義為一種不同於系統類別載入器(由 ClassLoader.getSystemClassLoader() 返回)或其祖先之一的類別載入器。

在以下三種情況中,此方法將返回 null

  1. 執行堆疊(stack)空間中的所有方法都來自於使用系統類別載入器或其祖先之一所定義的類別。
  2. 在執行堆疊(stack)空間中,直到第一個“特權”調用方(參見 AccessController.doPrivileged(java.security.PrivilegedAction))為止的所有方法都來自於使用系統類別載入器或其祖先之一所定義的類別。
  3. 使用 java.security.AllPermission 調用 checkPermission 不會導致 SecurityException。

返回:
最近出現的、使用非系統類別載入器定義的類別方法堆疊(stack)空間中的類別。
另請參見:
getSystemClassLoader, checkPermission

classDepth

@Deprecated
protected int classDepth(String name)
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

返回指定類別的堆疊(stack)空間深度。

參數:
name - 要尋找的類別的完全限定名。
返回:
在指定名稱的類別中第一個方法出現的堆疊(stack)訊框深度;如未找到這樣的幀,則返回 -1

classLoaderDepth

@Deprecated
protected int classLoaderDepth()
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

返回最近執行的、使用非系統類別載入器定義的類別方法的堆疊(stack)空間深度。非系統類別載入器被定義為一種不同於系統類別載入器(由 ClassLoader.getSystemClassLoader() 返回)或其祖先之一的類別載入器。

在以下三種情況中,此方法將返回 -1:

  1. 執行堆疊(stack)空間中的所有方法都來自於使用系統類別載入器或其祖先之一所定義的類別。
  2. 在執行堆疊(stack)空間中,直到第一個“特權”調用方(參見 AccessController.doPrivileged(java.security.PrivilegedAction))為止的所有方法都來自於使用系統類別載入器或其祖先之一所定義的類別。
  3. 使用 java.security.AllPermission 調用 checkPermission 不會導致 SecurityException。

返回:
最近出現的、使用非系統類別載入器定義的類別方法的堆疊(stack)訊框深度。
另請參見:
getSystemClassLoader, checkPermission

inClass

@Deprecated
protected boolean inClass(String name)
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

測試具有指定名稱的類別方法是否處於執行堆疊(stack)空間中。

參數:
name - 該類別的完全限定名。
返回:
如果具有指定名稱的類別方法處於執行堆疊(stack)空間中,則返回 true;否則返回 false

inClassLoader

@Deprecated
protected boolean inClassLoader()
已過時。 建議不使用該類別安全檢查。建議使用 checkPermission 調用。

主要是測試某個使用類別載入器定義的類別方法是否處於執行堆疊(stack)空間中。

返回:
如果調用 currentClassLoader 具有非 null 的返回值,則返回 true
另請參見:
currentClassLoader

getSecurityContext

public Object getSecurityContext()
創建一個封裝當前執行環境的物件。例如,此方法的結果由帶有三參數的 checkConnect 方法和帶有兩參數的 checkRead 方法使用。這些方法是必需的,因為一個受信任的方法可能代表另一方法被調用,以讀取一個檔案或打開一個Socket。受信任的方法需要確定是否允許另一個方法(可能不受信任)獨自執行該操作。

此方法的預設實作是返回 AccessControlContext 物件。

返回:
一個取決於實作的物件,該物件封裝了有關當前執行環境的足夠資訊,這些資訊用於稍後執行某些安全檢查。
另請參見:
checkConnect, checkRead, AccessControlContext

checkPermission

public void checkPermission(Permission perm)
如果基於當前有效的安全策略,不允許執行根據給定權限所指定的請求存取,則拋出 SecurityException

此方法使用給定的權限調用 AccessController.checkPermission

參數:
perm - 請求的權限。
拋出:
SecurityException - 如果根據當前的安全策略不允許進行存取。
NullPointerException - 如果 permission 參數為 null
從以下版本開始:
1.2

checkPermission

public void checkPermission(Permission perm,
                            Object context)
如果拒絕指定的安全上下文存取由給定權限所指定的資源,則拋出 SecurityException。該上下文必須是一個通過以前調用 getSecurityContext 所返回的安全上下文,並且應該根據為該安全上下文所配置的安全策略來作出存取控制決策。

如果 contextAccessControlContext 的一個實例,則用指定的權限調用 AccessControlContext.checkPermission 方法。

如果 context 不是 AccessControlContext 的一個實例,則拋出 SecurityException

參數:
perm - 指定的權限。
context - 一個取決於系統的安全上下文。
拋出:
SecurityException - 如果指定的安全上下文不是 AccessControlContext 的一個實例(如為 null),或者存取由給定權限所指定的資源時被拒絕。
NullPointerException - 如果權限參數為 null
從以下版本開始:
1.2
另請參見:
getSecurityContext(), AccessControlContext.checkPermission(java.security.Permission)

checkCreateClassLoader

public void checkCreateClassLoader()
如果不允許調用執行緒創建新的類別載入器,則拋出 SecurityException

此方法用 RuntimePermission("createClassLoader") 權限調用 checkPermission

如果覆寫此方法,那麼應該在已覆寫方法通常將要拋出異常時調用 super.checkCreateClassLoader

拋出:
SecurityException - 如果調用執行緒沒有創建新類別載入器的權限。
另請參見:
ClassLoader.ClassLoader(), checkPermission

checkAccess

public void checkAccess(Thread t)
如果不允許調用執行緒修改 thread 參數,則拋出 SecurityException

Thread 類別的 stopsuspendresumesetPrioritysetNamesetDaemon 方法為當前的安全管理器調用此方法。

如果 thread 參數是一個系統執行緒(屬於具有一個 null 父執行緒的執行緒組),那麼此方法使用 RuntimePermission("modifyThread") 權限調用 checkPermission。如果 thread 參數 是一個系統執行緒,則此方法不執行任何操作。

希望具有更為嚴格策略的應用程序應該覆寫此方法。如果覆寫此方法,那麼覆寫它的方法應該進行額外的檢查,查看調用執行緒是否具有 RuntimePermission("modifyThread") 權限,如果是,則此方法不執行任何操作。這樣做是為了確保允許那些被授予該權限的程式碼(如 JDK 本身)能夠操作所有執行緒。

如果覆寫此方法,那麼應該由已覆寫方法中的第一條語句調用 super.checkAccess,或者應該在已覆寫方法中放入等效的安全檢查程式碼。

參數:
t - 要檢查的執行緒。
拋出:
SecurityException - 如果調用執行緒沒有修改執行緒的權限。
NullPointerException - 如果執行緒參數為 null
另請參見:
resume, setDaemon, setName, setPriority, stop, suspend, checkPermission

checkAccess

public void checkAccess(ThreadGroup g)
如果不允許調用執行緒修改執行緒組參數,則拋出 SecurityException

當創建新的子執行緒或子執行緒組時,由 ThreadGroup 類別的 setDaemonsetMaxPrioritystopsuspendresumedestroy 方法為當前的安全管理器調用此方法。

如果該執行緒組是一個系統執行緒組(具有 null 父執行緒),那麼此方法使用 RuntimePermission("modifyThreadGroup") 權限調用 checkPermission。如果該執行緒組 是一個系統執行緒組,則此方法不執行任何操作。

希望具有更為嚴格策略的應用程序應該覆寫此方法。如果覆寫此方法,那麼覆寫它的方法應該進行額外的檢查,查看調用執行緒是否具有 RuntimePermission("modifyThreadGroup") 權限,如果是,則此方法不執行任何操作。這樣做是為了確保允許那些被授予該權限的程式碼(如 JDK 本身)能夠操作所有執行緒。

如果覆寫此方法,那麼應該由已覆寫方法中的第一條語句調用 super.checkAccess,或者應該在已覆寫方法中放入等效的安全檢查。

參數:
g - 要檢查的執行緒組。
拋出:
SecurityException - 如果調用執行緒沒有修改執行緒組的權限。
NullPointerException - 如果執行緒組參數為 null
另請參見:
destroy, resume, setDaemon, setMaxPriority, stop, suspend, checkPermission

checkExit

public void checkExit(int status)
如果不允許調用執行緒使用特定的狀態碼暫停 Java 虛擬機器,則拋出 SecurityException

Runtime 類別的 exit 方法為當前的安全管理器調用此方法。狀態 0 表示成功,其他值則表示各種錯誤。

此方法用 RuntimePermission("exitVM."+status) 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkExit

參數:
status - 退出狀態。
拋出:
SecurityException - 如果調用執行緒沒有用指定的狀態暫停 Java 虛擬機器的權限。
另請參見:
exit, checkPermission

checkExec

public void checkExec(String cmd)
如果不允許調用執行緒創建一個子進程,則拋出 SecurityException

Runtime 類別的 exec 方法為當前的安全管理器調用此方法。

如果 cmd 是絕對路徑,那麼此方法使用 FilePermission(cmd,"execute") 權限調用 checkPermission,否則用 FilePermission("<<ALL FILES>>","execute") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkExec

參數:
cmd - 指定的系統命令。
拋出:
SecurityException - 如果調用執行緒沒有創建子進程的權限。
NullPointerException - 如果 cmd 參數為 null
另請參見:
Runtime.exec(java.lang.String), Runtime.exec(java.lang.String, java.lang.String[]), Runtime.exec(java.lang.String[]), Runtime.exec(java.lang.String[], java.lang.String[]), checkPermission

checkLink

public void checkLink(String lib)
如果不允許調用執行緒動態連接由字元串參數檔案指定的資源庫程式碼,則拋出 SecurityException。此方法中的參數可以是一個簡單的資源庫名,或者是一個完整的檔案名。

Runtime 類別的 loadloadLibrary 方法為當前的安全管理器調用此方法。

此方法用 RuntimePermission("loadLibrary."+lib) 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkLink

參數:
lib - 資源庫名。
拋出:
SecurityException - 如果調用執行緒沒有動態地連接該資源庫的權限。
NullPointerException - 如果 lib 參數為 null
另請參見:
Runtime.load(java.lang.String), Runtime.loadLibrary(java.lang.String), checkPermission

checkRead

public void checkRead(FileDescriptor fd)
如果不允許調用執行緒從指定的檔案描述符進行讀取,則拋出 SecurityException

此方法用 RuntimePermission("readFileDescriptor") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkRead

參數:
fd - 取決於系統的檔案描述符。
拋出:
SecurityException - 如果調用執行緒沒有存取指定檔案描述符的權限。
NullPointerException - 如果檔案描述符參數為 null
另請參見:
FileDescriptor, checkPermission

checkRead

public void checkRead(String file)
如果不允許調用執行緒讀取由字元串參數指定的檔案,則拋出 SecurityException

此方法用 FilePermission(file,"read") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkRead

參數:
file - 取決於系統的檔案名。
拋出:
SecurityException - 如果調用執行緒沒有存取指定檔案的權限。
NullPointerException - 如果 file 參數為 null
另請參見:
checkPermission

checkRead

public void checkRead(String file,
                      Object context)
如果不允許指定的安全上下文讀取由字元串參數所指定的檔案,則拋出 SecurityException。該上下文必須是以前調用 getSecurityContext 所返回的安全上下文。

如果 contextAccessControlContext 的一個實例,則用 FilePermission(file,"read") 權限調用 AccessControlContext.checkPermission 方法。

如果 context 不是 AccessControlContext 的一個實例,則拋出 SecurityException

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkRead

參數:
file - 取決於系統的檔案名。
context - 取決於系統的安全上下文。
拋出:
SecurityException - 如果指定的安全上下文不是 AccessControlContext 的一個實例(如為 null),或者沒有讀取指定檔案的權限。
NullPointerException - 如果 file 參數為 null
另請參見:
getSecurityContext(), AccessControlContext.checkPermission(java.security.Permission)

checkWrite

public void checkWrite(FileDescriptor fd)
如果不允許調用執行緒寫入指定的檔案描述符,則拋出 SecurityException

此方法用 RuntimePermission("writeFileDescriptor") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkWrite

參數:
fd - 取決於系統的檔案描述符。
拋出:
SecurityException - 如果調用的方法沒有存取指定檔案描述符的權限。
NullPointerException - 如果檔案描述符參數為 null
另請參見:
FileDescriptor, checkPermission

checkWrite

public void checkWrite(String file)
如果不允許調用執行緒寫由字元串參數指定的檔案,則拋出 SecurityException

此方法用 FilePermission(file,"write") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkWrite

參數:
file - 取決於系統的檔案名。
拋出:
SecurityException - 如果調用執行緒沒有存取指定檔案的權限。
NullPointerException - 如果 file 參數為 null
另請參見:
checkPermission

checkDelete

public void checkDelete(String file)
如果不允許調用執行緒刪除指定的檔案,則拋出 SecurityException

File 類別的 delete 方法為當前的安全管理器調用此方法。

此方法用 FilePermission(file,"delete") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkDelete

參數:
file - 取決於系統的檔案名。
拋出:
SecurityException - 如果調用執行緒沒有刪除檔案的權限。
NullPointerException - 如果 file 參數為 null
另請參見:
File.delete(), checkPermission

checkConnect

public void checkConnect(String host,
                         int port)
如果不允許調用執行緒打開到指定主機和埠號號的Socket連接,則拋出 SecurityException

埠號號 -1 表示調用的方法正在試圖確定指定主機名的 IP 位址。

如果埠號號不等於 -1,則此方法用 SocketPermission(host+":"+port,"connect") 權限調用 checkPermission。如果埠號號等於 -1,則用 SocketPermission(host,"resolve") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkConnect

參數:
host - 要連接的主機名埠號。
port - 要連接的協議埠號。
拋出:
SecurityException - 如果不允許調用執行緒打開與指定 hostport 的Socket連接。
NullPointerException - 如果 host 參數為 null
另請參見:
checkPermission

checkConnect

public void checkConnect(String host,
                         int port,
                         Object context)
如果不允許指定的安全上下文打開與指定主機和埠號號的Socket連接,則拋出 SecurityException

埠號號 -1 表示調用的方法正試圖確定指定主機名的 IP 位址。

如果 context 不是 AccessControlContext 的一個實例,則拋出 SecurityException

否則就檢查埠號號。如果埠號號不等於 -1,則用 SocketPermission(host+":"+port,"connect") 權限調用 contextcheckPermission 方法。如果埠號號等於 -1,則用 SocketPermission(host,"resolve") 權限調用 contextcheckPermission 方法。

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkConnect

參數:
host - 要連接的主機名埠號。
port - 要連接的協議埠號。
context - 取決於系統的安全上下文。
拋出:
SecurityException - 如果指定的安全上下文不是 AccessControlContext的一個實例(如為 null),或者不允許打開與指定 hostport Socket連接。
NullPointerException - 如果 host 參數為 null
另請參見:
getSecurityContext(), AccessControlContext.checkPermission(java.security.Permission)

checkListen

public void checkListen(int port)
如果不允許調用執行緒等待與指定本地埠號號進行連接的請求,則拋出 SecurityException

如果埠號號不是 0,則此方法用 SocketPermission("localhost:"+port,"listen") 調用 checkPermission。如果埠號號是 0,則此方法用 SocketPermission("localhost:1024-","listen") 調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkListen

參數:
port - 本地埠號。
拋出:
SecurityException - 如果調用的方法沒有偵聽指定埠號的權限。
另請參見:
checkPermission

checkAccept

public void checkAccept(String host,
                        int port)
如果不允許調用執行緒從指定的主機和埠號號接受Socket連接,則拋出 SecurityException

ServerSocket 類別的 accept 方法為當前的安全管理器調用此方法。

此方法用 SocketPermission(host+":"+port,"accept") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkAccept

參數:
host - Socket連接的主機名。
port - Socket連接的埠號號。
拋出:
SecurityException - 如果調用執行緒沒有接受連接的權限。
NullPointerException - 如果 host 參數為 null
另請參見:
ServerSocket.accept(), checkPermission

checkMulticast

public void checkMulticast(InetAddress maddr)
如果不允許調用執行緒使用(加入/離開/發送/接收)IP 多址廣播,則拋出 SecurityException

此方法使用 java.net.SocketPermission(maddr.getHostAddress(), "accept,connect") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkMulticast

參數:
maddr - 要使用的 Internet 組位址。
拋出:
SecurityException - 如果不允許調用執行緒使用(加入/離開/發送/接收)IP 多址廣播。
NullPointerException - 如果位址參數為 null
從以下版本開始:
JDK1.1
另請參見:
checkPermission

checkMulticast

@Deprecated
public void checkMulticast(InetAddress maddr,
                                      byte ttl)
已過時。 由 #checkPermission(java.security.Permission) 取代

如果不允許調用執行緒使用(加入/離開/發送/接收)IP 多址廣播,則拋出 SecurityException

此方法用 java.net.SocketPermission(maddr.getHostAddress(), "accept,connect") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkMulticast

參數:
maddr - 要使用的 Internet 組位址。
ttl - 正在使用的值,如果是用多址廣播發送的話。註:此特定實作不使用 ttl 參數。
拋出:
SecurityException - 如果不允許調用執行緒使用(加入/離開/發送/接收)IP 多址廣播。
NullPointerException - 如果位址參數為 null
從以下版本開始:
JDK1.1
另請參見:
checkPermission

checkPropertiesAccess

public void checkPropertiesAccess()
如果不允許調用執行緒存取或修改系統屬性,則拋出 SecurityException

System 類別的 getPropertiessetProperties 方法使用此方法。

此方法用 PropertyPermission("*", "read,write") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkPropertiesAccess

拋出:
SecurityException - 如果調用執行緒沒有存取或修改系統屬性的權限。
另請參見:
System.getProperties(), System.setProperties(java.util.Properties), checkPermission

checkPropertyAccess

public void checkPropertyAccess(String key)
如果不允許調用執行緒存取具有指定的 key 名的系統屬性,則拋出 SecurityException

System 類別的 getProperty 方法使用此方法。

此方法用 PropertyPermission(key, "read") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkPropertyAccess

參數:
key - 系統屬性鍵。
拋出:
SecurityException - 如果調用執行緒沒有存取指定系統屬性的權限。
NullPointerException - 如果 key 參數為 null
IllegalArgumentException - 如果 key 為空。
另請參見:
System.getProperty(java.lang.String), checkPermission

checkTopLevelWindow

public boolean checkTopLevelWindow(Object window)
如果不受信任的調用執行緒調出由 window 參數指出的頂層視窗,則返回 false。在這種情況下,調用方仍然可以決定顯示視窗,但視窗應包括某些可視的警告。如果此方法返回 true,則視窗的顯示沒有任何特殊的限制。

有關受信任和不受信任視窗的更多資訊,請參見 Window 類別。

此方法用 AWTPermission("showWindowWithoutWarningBanner") 權限調用 checkPermission,並且如果未拋出 SecurityException,則返回 true,否則返回 false

如果覆寫此方法,那麼通常應該在已覆寫方法將要返回 false 時調用 super.checkTopLevelWindow,並且應該返回 super.checkTopLevelWindow 值。

參數:
window - 所創建的新視窗。
返回:
如果信任的調用執行緒彈出頂層視窗,則返回 true,否則返回 false
拋出:
NullPointerException - 如果 window 參數為 null
另請參見:
Window, checkPermission

checkPrintJobAccess

public void checkPrintJobAccess()
如果不允許調用執行緒發起一個列印作業請求,則拋出 SecurityException

此方法用 RuntimePermission("queuePrintJob") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkPrintJobAccess

拋出:
SecurityException - 如果調用執行緒沒有發起列印作業請求的權限。
從以下版本開始:
JDK1.1
另請參見:
checkPermission

checkSystemClipboardAccess

public void checkSystemClipboardAccess()
如果不允許調用執行緒存取系統剪貼板,則拋出 SecurityException

此方法用 AWTPermission("accessClipboard") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkSystemClipboardAccess

拋出:
SecurityException - 如果調用執行緒沒有存取系統剪貼板的權限。
從以下版本開始:
JDK1.1
另請參見:
checkPermission

checkAwtEventQueueAccess

public void checkAwtEventQueueAccess()
如果不允許調用執行緒存取 AWT 事件佇列,則拋出 SecurityException

此方法用 AWTPermission("accessEventQueue") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkAwtEventQueueAccess

拋出:
SecurityException - 如果調用執行緒沒有存取 AWT 事件佇列的權限。
從以下版本開始:
JDK1.1
另請參見:
checkPermission

checkPackageAccess

public void checkPackageAccess(String pkg)
如果不允許調用執行緒存取由參數指定的套件,則拋出 SecurityException

由類別載入器的 loadClass 方法使用此方法。

此方法首先獲取受限制套件的列表,方法是從對 java.security.Security.getProperty("package.access") 的調用中獲得一個逗號分隔的列表,並查看受限制套件是否以 pkg 開頭或等於該字元。如果是,則用 RuntimePermission("accessClassInPackage."+pkg) 權限調用 checkPermission

如果覆寫了此方法,則應在已覆寫方法的首行調用 super.checkPackageAccess

參數:
pkg - 套件名。
拋出:
SecurityException - 如果調用執行緒沒有存取指定套件的權限。
NullPointerException - 如果包名參數為 null
另請參見:
loadClass, getProperty, checkPermission

checkPackageDefinition

public void checkPackageDefinition(String pkg)
如果不允許調用執行緒在參數指定的套件中定義類別,則拋出 SecurityException

由類別載入器的 loadClass 方法使用此方法。

此方法首先獲取受限制套件的列表,方法是從對 java.security.Security.getProperty("package.definition") 的調用中獲得一個逗號分隔的列表,並查看受限制套件是否以 pkg 開頭或等於該字元。如果是,則用 RuntimePermission("defineClassInPackage."+pkg) 權限調用 checkPermission

如果覆寫了此方法,則應在已覆寫方法的首行調用 super.checkPackageDefinition

參數:
pkg - 套件名。
拋出:
SecurityException - 如果調用執行緒沒有在指定包中定義類別的權限。
另請參見:
ClassLoader.loadClass(java.lang.String, boolean), getProperty, checkPermission

checkSetFactory

public void checkSetFactory()
如果不允許調用執行緒設置由 ServerSocketSocket 使用的Socket處理器,或者由 URL 使用的串流處理程序處理器,則拋出 SecurityException

此方法用 RuntimePermission("setFactory") 權限調用 checkPermission

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkSetFactory

拋出:
SecurityException - 如果調用執行緒沒有指定Socket處理器或串流處理程序處理器的權限。
另請參見:
setSocketFactory, setSocketImplFactory, setURLStreamHandlerFactory, checkPermission

checkMemberAccess

public void checkMemberAccess(Class<?> clazz,
                              int which)
如果不允許調用執行緒存取程序,則拋出 SecurityException

預設的策略是允許存取 PUBLIC 成員,以及存取具有與調用方相同類別載入器的類別。在所有其他情況下,此方法用 RuntimePermission("accessDeclaredMembers") 權限調用 checkPermission

如果覆寫此方法,則不能調用 super.checkMemberAccess,因為 checkMemberAccess 的預設實作依賴於堆疊(stack)空間深度為 4 時檢查的程式碼。

參數:
clazz - 要執行反射的類別。
which - 存取型別,PUBLIC 或 DECLARED。
拋出:
SecurityException - 如果調用方沒有存取成員的權限。
NullPointerException - 如果 clazz 參數為 null
從以下版本開始:
JDK1.1
另請參見:
Member, checkPermission

checkSecurityAccess

public void checkSecurityAccess(String target)
確定是應該允許還是拒絕具有指定權限目標名的權限。

如果允許請求的權限,則此方法不執行任何操作。如果拒絕,則引發 SecurityException。

此方法為給定權限的目標名創建一個 SecurityPermission 物件並用該物件調用 checkPermission

有關可用權限目標名的列表,請參閱 SecurityPermission 的文檔。

如果覆寫此方法,那麼通常應該在已覆寫方法將要拋出異常時調用 super.checkSecurityAccess

參數:
target - SecurityPermission 的目標名。
拋出:
SecurityException - 如果調用執行緒沒有所請求存取的權限。
NullPointerException - 如果 target 為 null。
IllegalArgumentException - 如果 target 為空。
從以下版本開始:
JDK1.1
另請參見:
checkPermission

getThreadGroup

public ThreadGroup getThreadGroup()
調用此方法時,返回所有新創建的執行緒實例化後所在的執行緒組。預設情況下,返回當前執行緒所在的執行緒組。應該由指定的安全管理器覆寫此方法,以返回適當的執行緒組。

返回:
ThreadGroup 新執行緒被實例化後所在的執行緒組
從以下版本開始:
JDK1.1
另請參見:
ThreadGroup

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only