<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    java.security AccessController

    AccessController.doPrivileged是一個(gè)在AccessController類中的靜態(tài)方法,允許在一個(gè)類實(shí)例中的代碼 通知這個(gè)AccessController:它的代碼主體是享受"privileged(特權(quán)的)",它單獨(dú)負(fù)責(zé)對(duì)它的可得的資源的訪問請(qǐng)求,而不管這個(gè) 請(qǐng)求是由什么代碼所引發(fā)的。

    這就是說,一個(gè)調(diào)用者在調(diào)用doPrivileged方法時(shí),可被標(biāo)識(shí)為 "特權(quán)"。在做訪問控制決策時(shí),如果checkPermission方法遇到一個(gè)通過doPrivileged調(diào)用而被表示為 "特權(quán)"的調(diào)用者,并且沒有上下文自變量,checkPermission方法則將終止檢查。如果那個(gè)調(diào)用者的域具有特定的許可,則不做進(jìn)一步檢查, checkPermission安靜地返回,表示那個(gè)訪問請(qǐng)求是被允許的;如果那個(gè)域沒有特定的許可,則象通常一樣,一個(gè)異常被拋出。

    一、"特權(quán)"特性的正常使用如下所示:

    1、如果你不需要從"特權(quán)"塊內(nèi)返回一個(gè)值,按下列代碼去做:

    somemethod() {

          ...normal code here...

          AccessController.doPrivileged(
    new PrivilegedAction() {
                
    public Object run() {
                        // privileged code goes here, for example:
                        System.loadLibrary("awt");
                        return null// nothing to return
                }
          });

          ...normal code here...


    PrivilegedAction是一個(gè)接口,它帶有一個(gè)被稱為run的方法,這個(gè)方法返回一個(gè)Object。上述例子顯示了一個(gè)用來實(shí)現(xiàn)那個(gè)接口的匿名內(nèi)類的創(chuàng)建,并提供了一個(gè)run方法的具體實(shí)現(xiàn)。

    當(dāng)做一個(gè)doPrivileged調(diào)用時(shí),一個(gè)PrivilegedAction實(shí)現(xiàn)的實(shí)例被傳遞給它。doPrivileged方法在使特權(quán)生效 后,從PrivilegedAction實(shí)現(xiàn)中調(diào)用run方法,并返回run方法的返回值以作為doPrivileged的返回值,這一點(diǎn)在本例中被忽 略。

    2、如果你需要返回一個(gè)值,你可按如下方法去做:

    somemethod() {

            ...normal code here...

            String user 
    = (String) AccessController.doPrivileged(new PrivilegedAction() {
                      public Object run() {
                             return System.getProperty("user.name");
                     }
            });

            ...normal code here...

    }


    3、如果用你的run方法執(zhí)行的動(dòng)作可能扔出一個(gè)"檢查"的異常(包括在一個(gè)方法的throws子句列表中),則你需要使用PrivilegedExceptionAction接口,而不是使用PrivilegedAction接口:

    somemethod() throws FileNotFoundException {

            ...normal code here...

            try {
                   FileInputStream fis 
    = (FileInputStream)
                   AccessController.doPrivileged(
    new PrivilegedExceptionAction() {
                         public Object run() throws FileNotFoundException {
                                return new FileInputStream("someFile");
                         }
                   });
            } 
    catch (PrivilegedActionException e) {
                     // e.getException() should be an instance of
                     // FileNotFoundException,
                     // as only "checked" exceptions will be "wrapped" in a
                     // PrivilegedActionException.
                    throw (FileNotFoundException) e.getException();
            }

           ...normal code here...

    }

    有關(guān)被授予特權(quán)的一些重要事項(xiàng):
    首先,這個(gè)概念僅存在于一個(gè)單獨(dú)線程內(nèi)。一旦特權(quán)代碼完成了任務(wù),特權(quán)將被保證清除或作廢。

    第二,在這個(gè)例子中,在run方法中的代碼體被授予了特權(quán)。然而,如果它調(diào)用無特權(quán)的不可信代碼,則那個(gè)代碼將不會(huì)獲得任何特權(quán);只有在特權(quán)代碼具有許可并且在直到checkPermission調(diào)用的調(diào)用鏈中的所有隨后的調(diào)用者也具有許可時(shí), 一個(gè)許可才能被準(zhǔn)予。

    二、使用事例:

    final String name = MyClass.class.getName();
    String className 
    = AccessController.doPrivileged(new PrivilegedAction<String>() {
                    
    public String run() {
                        
    return System.getProperty(name);
                    }
    });

     

    posted on 2008-03-12 18:47 gembin 閱讀(1009) 評(píng)論(0)  編輯  收藏 所屬分類: JavaSE

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊(cè)

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    free counters
    主站蜘蛛池模板: 亚洲精品国产成人| 亚洲最大成人网色| 国产成人亚洲精品蜜芽影院| 免费av欧美国产在钱| 国产成人精品日本亚洲11| 91嫩草国产在线观看免费| 亚洲精品123区在线观看| 午夜dj免费在线观看| 亚洲av乱码中文一区二区三区| 嫩草视频在线免费观看| 国产亚洲精品第一综合| 亚洲欧洲精品成人久久奇米网 | 免费人成激情视频在线观看冫| 国产亚洲av片在线观看18女人| 国产精品福利在线观看免费不卡| 亚洲精品WWW久久久久久| 国产亚洲精品免费视频播放| 久久精品国产亚洲AV麻豆~| 久久久久av无码免费网 | 亚洲日韩一区二区三区| 国产美女无遮挡免费视频网站 | 久久最新免费视频| 亚洲天堂一区二区| 夜夜爽免费888视频| 免费无码又爽又黄又刺激网站| 亚洲日韩欧洲无码av夜夜摸| 一级毛片免费毛片一级毛片免费| 亚洲fuli在线观看| 亚洲AV蜜桃永久无码精品| 久久精品国产这里是免费| 2020久久精品亚洲热综合一本| 免费在线视频一区| 日韩电影免费在线观看中文字幕| 亚洲一区精品视频在线| 免费一看一级毛片人| 免费人成毛片动漫在线播放| 亚洲综合av一区二区三区不卡| 国产精品亚洲综合一区| 99在线精品视频观看免费| 一级毛片视频免费观看| 亚洲国产精品成人综合久久久|