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