文章出處

AccessController.doPrivileged意思是這個是特別的,不用做權限檢查.

在什么地方會用到呢:加入1.jar中有類可以讀取一個文件,現在我們要使用1.jar去做這個事情.但是我們的類本生是沒有權限去讀取那個文件的,一般情況下就是眼睜睜的看著了.  

但是jiava提供了doPrivileged.在1.jar中如果讀取文件的方法是通過doPrivileged來實現的.就不會有后面的檢查了,現在我們就可以使用1.jar去讀取那個文件了.

例子:

Java代碼  收藏代碼
  1. package huangyunbin.client;  
  2.   
  3. import java.io.FilePermission;  
  4. import java.security.AccessController;  
  5. import java.security.Permission;  
  6. import java.security.PrivilegedAction;  
  7.   
  8. public class Client  
  9. {  
  10.     public   void  doCheck() {  
  11.                 AccessController.doPrivileged( new  PrivilegedAction()  {  
  12.             public  Object run()  {  
  13.                 check();  
  14.                 return   null ;  
  15.             }  
  16.         } );  
  17.     }  
  18.   
  19.     private   void  check()  {  
  20.         Permission perm  =   new FilePermission( "/1.txt" ,  "read" );  
  21.         AccessController.checkPermission(perm);  
  22.         System.out.println( " TestService has permission " );  
  23.     }  
  24. }  



把這個類打包成client.jar 放到/home/h/client/下
我們建立個my.policy文件,文件內容是:

Java代碼  收藏代碼
  1. grant codeBase  "file:/home/h/client/*"   {  
  2.      permission java.io.FilePermission  "/1.txt","read";  
  3.  };  



配置文件的意思是 /home/h/client/下面的jar包或class類 可以讀取/1.txt.


現在我們再創建一個項目:創建一個類來調用前面的Client

Java代碼  收藏代碼
  1. public class server  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         Client c =new    Client();  
  6.         c.doCheck();  
  7.     }  
  8. }  



運行這個server類.注意這里要用上之前的my.policy文件
在vm參數中寫上這樣的:

Java代碼  收藏代碼
  1. -Djava.security.manager   
  2. -Djava.security.policy=/home/h/my.policy  



運行,結果是
TestService has permission

在配置文件my.policy中我們沒有允許server去讀取/1.txt,但是現在卻可以正常訪問.這個就是 AccessController.doPrivileged的作用.

 

原文:http://huangyunbin.iteye.com/blog/1942509

推薦文章:Java 安全模型介紹


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()