<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基礎
    主站蜘蛛池模板: 久久久综合亚洲色一区二区三区 | 亚洲第一成人影院| 久久久久亚洲精品天堂久久久久久| 亚洲视频在线观看| 欧亚一级毛片免费看| 久久www免费人成精品香蕉| 亚洲电影免费观看| 亚洲成A∨人片天堂网无码| 亚洲第一第二第三第四第五第六| 青青操视频在线免费观看| 在线观看免费毛片| 久久久久亚洲AV综合波多野结衣| 2022免费国产精品福利在线| 欧美a级成人网站免费| 亚洲色欲色欲www在线丝| 亚洲精品蜜夜内射| 日本特黄a级高清免费大片| 久久精品国产亚洲香蕉 | WWW免费视频在线观看播放| 亚洲午夜成人精品电影在线观看| 亚洲精品无码久久久久牙蜜区| 日韩精品在线免费观看| 国产一级高清免费观看| 亚洲欧洲国产精品久久| 久久最新免费视频| 国产V亚洲V天堂无码久久久| 免费的黄色网页在线免费观看| 亚洲国产综合人成综合网站| 99亚洲精品卡2卡三卡4卡2卡| 亚洲一区二区免费视频| 亚洲精品国产字幕久久不卡| 无人视频免费观看免费视频| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 黄色大片免费网站| 成人免费大片免费观看网站| 久久精品亚洲综合| 59pao成国产成视频永久免费| 亚洲人成网国产最新在线| 人妻无码久久一区二区三区免费| 日日操夜夜操免费视频| 特级毛片A级毛片免费播放|