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

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

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

    隨筆 - 37  文章 - 29  trackbacks - 0


    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    最新評論

    閱讀排行榜

    評論排行榜

    JAAS:Java Authentication and Authorization Service Java認證和授權服務,從jdk1.4開始就集成JAAS。
    目前流行的Acegi中也提供了JAAS
    JAAS的幾個核心類和接口:
      1.Subject: 實際被認證的人或者服務
      2.Principal (interface): Subject的唯一標識。一個Subject含有一個或多個Pricipal,比如一個人有身份證、護照等Pricipal
      3.LoginContext
      4.LoginModule (interface)
      5.CallbackHandler (interface)
    還有兩個配置文件:×××.conf(或config) 和 ×××..policy
    JAAS首先使用一個LoginContext類來查找配置文件中的內容,這些內容可以用來對LoginModules進行初始化。所有 LoginContext沒有指定的初始化參數都會包含在配置文件中。LoginContext向LoginModule傳遞一個CallbackHandler對象和一個Subject,如果LoginModule還需要其他認證信息,它就會用CallbackHandler回調適當的應用程序,從而獲得這些信息。

    在應用程序中,一般這樣使用LoginContext:
        try {
            LoginContext loginContext = new LoginContext("Sample", callbackHandler );  //"Sample"定義在相關的conf文件中; callbackHandler見下面
            loginContext.login();  //如果認證失敗,則拋出異常
        } catch (LoginException e) {
            //do sth.
        }

    我們要使用JAAS,就需要實現上述接口,以及配置好文件
    上面的代碼,只是在應用時,這樣寫就夠了。當然,在這之前,還需要設置callbackHandler:
        SampleCallbackHandler callbackHandler = new SampleCallbackHandler();
        // 設置用戶名、密碼等需要驗證的信息到callbackHandler里。具體怎么設,看自己的SampleCallbackHandler怎么設計了
         ......

    舉例:
        public class SampleCallbackHandler implements CallbackHandler {
            protected String username;
            protected String password;

            public void handle(Callback[] callbacks)
                throws UnsupportedCallbackException {    //這個方法是必須實現的,用來設置username和password到對應的Callback變量中
                   for (int index = 0; index < callbacks.length; index++) {
                       
    if (callbacks[index] instanceof NameCallback) {
                        NameCallback ncb 
    = (NameCallback) callbacks[index];
                        ncb.setName(username);
                  } else
    if (callbacks[index] instanceof PasswordCallback) {
                        PasswordCallback pcb 
    = (PasswordCallback) callbacks[index];
                        pcb.setPassword(password.toCharArray());
                  } else if() {  //如果還有其他需要驗證的信息
                           ...
                  }
            }
           
            //其他方法,諸如設置username和password
        }

        然后來說前面的"Sample"。這里的"Sample"對應一個Sample.conf文件,這個文件的具體位置可以自己設置。conf文件中配置了對應的LoginModule類,可以是一個或多個,用來做不同的驗證。
        public class SampleLoginModule implements LoginModule {
            ....
        }
    LoginModule有5個方法需要實現,簡單點寫個方法名得了:
    public void initialize(Subject subject, CallbackHandler callbackHandler, Map arg2, Map arg3);
    public boolean login() throws LoginException;
    public boolean commit() throws LoginException;
    public boolean abort() throws LoginException;
    public boolean logout() throws LoginException;
    業務邏輯主要在login()中實現,步驟包括了從callbackHandler中讀取用戶名密碼,然后該從數據庫驗證就從數據庫驗證,該從配置文件驗證就從配置文件驗證,該從其他系統中驗證就從其他系統中驗證...

    Pricipal的實現就不寫了,下面鏈接中的例子寫得很詳細。我的只是給自己理一個大概步驟,以后回顧起來也方便
    不過Subject和Pricipal應該有更重要的用處,比如在Authorization中,把pricipal和要可以執行的相關操作對應起來。這個還沒看下去,接觸的代碼中也沒用到。放到以后補充

    更多內容,可直接查看sun的JDK文檔http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html
    實例:http://www.tkk7.com/fastunit/archive/2008/01/28/178204.html




    posted on 2008-08-02 13:52 EvanLiu 閱讀(795) 評論(0)  編輯  收藏 所屬分類: Java基礎
    主站蜘蛛池模板: 无码国产精品久久一区免费| 亚洲 国产 图片| 美女啪啪网站又黄又免费| 久久久久亚洲av成人无码电影| 久久精品国产免费一区| 久久精品国产亚洲av麻豆图片| 又粗又硬免费毛片| 久久久久国产免费| 91久久青青草原线免费| 亚洲日韩中文字幕| 无码一区二区三区免费| 久久亚洲国产成人影院| 中文字幕久久亚洲一区| 国产啪精品视频网免费| 九九99热免费最新版| 亚洲国产视频久久| 久久精品7亚洲午夜a| 国产免费黄色大片| 67pao强力打造高清免费| 色妞www精品视频免费看| 亚洲国产精品人久久电影| 久久久久亚洲?V成人无码| 永久免费av无码不卡在线观看| 中文字幕日本人妻久久久免费| 亚洲AV性色在线观看| 亚洲成年人电影网站| 亚洲线精品一区二区三区影音先锋| 成年人性生活免费视频| 久久免费的精品国产V∧| 又粗又长又爽又长黄免费视频 | 国产免费区在线观看十分钟| 77777午夜亚洲| 亚洲精品免费观看| 亚洲欧洲日本在线| 国产男女猛烈无遮挡免费视频网站| 69视频在线观看免费| 在线免费观看伊人三级电影| 特级毛片A级毛片免费播放| 亚洲 日韩经典 中文字幕 | 亚洲成人精品久久| 亚洲一区二区三区偷拍女厕|