<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://m.tkk7.com/fastunit/archive/2008/01/28/178204.html




    posted on 2008-08-02 13:52 EvanLiu 閱讀(795) 評論(0)  編輯  收藏 所屬分類: Java基礎
    主站蜘蛛池模板: 亚洲精品国产精品国自产网站| 亚洲Av无码专区国产乱码DVD| 亚洲娇小性色xxxx| 亚洲一级毛片免费看| 亚洲国产精品人久久| 久久久久久夜精品精品免费啦| 亚洲AV无码成人网站久久精品大| 久久国产免费直播| 亚洲av综合avav中文| 久久黄色免费网站| 久久亚洲AV无码精品色午夜| 免费毛片a在线观看67194| 亚洲综合精品第一页| 国产jizzjizz免费视频| 国产成人1024精品免费| 久久亚洲AV成人出白浆无码国产| 37pao成人国产永久免费视频| 337p日本欧洲亚洲大胆色噜噜| 永久在线免费观看| 亚洲色偷精品一区二区三区 | 黄+色+性+人免费| 亚洲国产日韩视频观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 国产精品视频免费| 国产精品久久久久久亚洲影视| 亚洲真人日本在线| 最近中文字幕无免费| 亚洲性色精品一区二区在线| 国产精品久久免费视频| 中文字幕在线免费播放| 亚洲av永久无码嘿嘿嘿| 免费一级特黄特色大片在线观看| 国产在线观看免费av站| 久久精品国产亚洲αv忘忧草| 亚洲精品成人区在线观看| 五月亭亭免费高清在线| 国产亚洲午夜精品| 亚洲AV日韩AV永久无码免下载| 毛片网站免费在线观看| 岛国岛国免费V片在线观看 | 免费羞羞视频网站|