JAAS的quick start
前言:維護使用Java編寫的應用程序的安全,我們可以使其運行在安全管理器的保護之下,防止無意造成的系統故障。
1. 首先嘗試一下基于Policy的授權的感覺吧。(熱身)
先寫一個簡單程序PrintUserHome
import java.io.File;
import java.io.FileInputStream;
public class PrintUserHome {
public static void main(String[] args) throws Exception {
System.out.println(System.getProperty("user.home"));
}
}
直接運行可以打印出用戶的主目錄.
如果在安全管理器下運行。使用java -Djava.security.manager PrintUserHome
則會打出如下信息:
Exception in thread "main" java.security.AccessControlException: access denied (java.util.
PropertyPermission user.home read)
缺省安全策略運行的缺省安全管理器禁止訪問user.home屬性
接著,編寫一個Policy文件,比如在C盤的根目錄下創建javasecurityjaas.policy,內容如下:
grant {
permission java.util.PropertyPermission "user.home", "read";
};
然后使用命令程序
Java -Djava.security.manager -Djava.security.policy=C:"javasecurityjaas.policy PrintUserHome
則會正常輸出結果.
另外,我們也可以試一下讀取文件的權限,比如,現在c盤根目錄下建一個sample.txt的文件,然后在main函數中增加下面兩行代碼
File file = new File("c:""sample.txt");
FileInputStream in = new FileInputStream(file);
則必須相應的在Policy文件中添加:
permission java.io.FilePermission "c:"sample.txt", "read";
2. 接下來是一個關于JAAS驗證和授權的簡單示例。
呵,這個想想還是直接看源代碼好了,在最下面下載,具體知識點可以參考以前文章中介紹的知識點。
Policy文件中有個地方需要修改成自己的路徑就可以了。下面的地方
D:\CoreDevelop\workspaces\effectiveWorksapce\javasecuritysample\com\joseph\javasecurity\sample\*
3.注意幾點
a) 記得還要注意Policy文件的加載順序。
When the Policy is initialized, the system policy is loaded in first, and then the user policy is
added to it. If neither policy is present, a built-in policy is used. This built-in policy is the same
as the java.policy file installed with the JRE.
首先是加載系統的Policy文件,policy文件在(和操作系統和JDK版本有關系)
java.home/lib/security/java.policy (Solaris)
java.home"lib"security"java.policy (Win32)
比如windows下的JDK1.5Policy文件在
java.home "jre"lib"security" java.policy
用戶策略文件在:
user.home/.java.policy (Solaris)
user.home".java.policy (Win32)
如果兩者都不存在,則使用內置的默認Policy文件,此文件和JRE下面的策略文件是一樣的。
b) 另外就是設置
-Djava.security.policy=C:"javasecurityjaas.policy
如果是用=是追加,而==是覆蓋Policy文件。
參考文檔:
JavaSecuritySample源代碼
http://gocom.primeton.com/modules/newbb/viewtopic.php?topic_id=8293
http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html