每個Java應用都可以有自己的安全管理器,它是防范惡意攻擊的主要安全衛士。
安全管理器通過執行運行階段檢查和訪問授權,以實施應用所需的安全策略,從而保護資源免受惡意操作的攻擊。
實際上,安全管理器根據Java安全策略文件決定將哪組權限授予類。
然而,當不可信的類和第三方應用使用JVM時,Java安全管理器將使用與JVM相關的安全策略來識別惡意操作。
在很多情況下,威脅模型不包含運行於JVM中的惡意代碼,此時Java安全管理器便不是必需的。
當安全管理器檢測到違反安全策略的操作時,JVM將引發AccessControlException或SecurityException。
策略(Policy)
類裝載器用Policy對象幫助它們決定,把一段代碼導入虛擬機時應該給它們什么樣的權限. 任何時候,每一個應用程序都只有一個Policy對象.
保護域(ProtectionDomain)
當類裝載器將類型裝入java虛擬機時,它們將為每一個類型指派一個保護域,保護域定義了授予
一段特定的代碼的所有權限.裝載入java虛擬機的每一個類型都屬於一個且僅屬於一個保護域.
當運行未知的Java程序的時候,該程序可能有惡意代碼(刪除系統文件、重啟系統等),
為了防止運行惡意代碼對系統產生影響,需要對運行的代碼的權限進行控制,這時候就要啟用Java安全管理器。
默認的安全管理器配置文件是 $JAVA_HOME/jre/lib/security/java.policy
啟動安全管理有兩種方式,建議使用啟動參數方式。
1 啟動參數方式
啟動程序的時候通過附加參數啟動安全管理器:
-Djava.security.manager
若要同時指定配置文件的位置那么示例如下:
-Djava.security.manager -Djava.security.policy="E:/java.policy"
2 編碼方式啟動
也可以通過編碼方式啟動,不過不建議:
System.setSecurityManager(new SecurityManager());
不過參數啟動使用靈活,源碼在類(sun.misc.Launcher)中。
