欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JAAS簡(jiǎn)介及實(shí)例

JAAS是對JCE安全框架的重要補充,通過(guò)提供認證用戶(hù)和確定用戶(hù)授權來(lái)增強JAVA解決方案的動(dòng)態(tài)安全性,使得資源能夠得到很好得到保護和控制(JAAS使用動(dòng)態(tài)的安全策略來(lái)定義權限,而不是將其靜態(tài)的嵌入到代碼中)。

JAAS采用的是插件的運行方式,一開(kāi)始就被設計成可插拔的(Pluggable),根據應用的需要,只要配置一下JAAS的配置文件,這些組件即可包含 在我們的應用程序中。使用JAAS包接口,開(kāi)發(fā)者和第三方可以開(kāi)發(fā)一些組件或者BEAN來(lái)實(shí)現登陸認證,或者通過(guò)與使用者或外部的系統的進(jìn)行交互來(lái)訪(fǎng)問(wèn)認 證信息(當然我們可以設計更為穩妥安全的密碼學(xué)協(xié)議)。JAAS提供了一組用于用戶(hù)鑒別的類(lèi)和接口,這意味著(zhù)支持JAAS的應用會(huì )要求用戶(hù)登陸,同時(shí) JAAS提供了另一組用于用戶(hù)授權的類(lèi)和接口。在討論例子之前,先對JAAS API中常用的一些類(lèi)和接口做個(gè)簡(jiǎn)單的說(shuō)明。

LoginModule :確認用戶(hù)的合法性(使用CallbackHandler或者其他類(lèi)方法),并分配訪(fǎng)問(wèn)權限principal給subject;

LoginContext:為了實(shí)現用戶(hù)鑒別,建立相應的環(huán)境,從配置文件中導入規則;

CallbackHandler:回調處理器,負責與用戶(hù)(代碼擁有者和執行者)交互,確認其身份的合法性;

Subject:表示登陸處理的目標,即一個(gè)被鑒別的用戶(hù)。并可關(guān)聯(lián)一個(gè)或多個(gè)pirncipal;

Principal:表示具有訪(fǎng)問(wèn)權限的一個(gè)實(shí)體,可以看作是可以執行某種操作的證件。

理解這些類(lèi)和接口的關(guān)系我給個(gè)生動(dòng)的比方:一個(gè)軍事學(xué)校,入學(xué)的時(shí)候校方(LoginModule)根據學(xué)生(Subject)的入學(xué)通知來(lái)確定其合法 性,這個(gè)過(guò)程交由某工作人員(CallbackHandler)執行,(CallbackHandler)確認后,(LoginModule)給不同 (Subject)根據其身份發(fā)給相關(guān)的證件(Principal),有了該證件就可以訪(fǎng)問(wèn)對應的資源,(Subject)根據自己的 (Principal)的級別可以使用和訪(fǎng)問(wèn)學(xué)校不同資源。

一個(gè)(Subject)的(Principal)如果是士官級,那么可以訪(fǎng)問(wèn)的資源就相對少些,如果是將軍級那就多些。當然一個(gè)(Subject)可以擁有多個(gè)(Principal)。

通過(guò)分析我們會(huì )發(fā)現,JAAS采用的也是身份檢查+權限分配模式。因此JAAS的應用也分成兩個(gè)部分:(1)認證;(2)授權。過(guò)程是先認證后根據身份來(lái)授權(有歧視的嫌疑的東東,本人可是反歧視人士)。

那么JAAS是如何實(shí)現認證的呢?又是如何實(shí)現授權的呢?且聽(tīng)我慢慢分解,將其妙處展現給大家。

二 JAAS的認證原理

(1) 設置JAAS配置文件,關(guān)于配置非常有技巧,跟設置防火墻的過(guò)濾規則有得一拼;

(2) 根據JAAS配置文件的條目加載一個(gè)或者多個(gè)LoginModule(通常一個(gè),也可以變態(tài)得使用多個(gè));

(3) 為了管理用戶(hù)認證的有關(guān)過(guò)程,將提供一個(gè)可選的LoginModule構造函數和一個(gè)回調處理器CallbackHandler。如果沒(méi)有在構造函數中提供回調處理器,系統采用默認設置;

(4) 初始并實(shí)例化LoginContext(加載配置規則),如果成功,則調用LoginContext的login方法。無(wú)論是否需 要,LoginContext都會(huì )去首先讀取JAAS配置文件,從中獲得要加載的登陸模塊信息,其initialize方法將按照配置文件中的相關(guān)內容提 供LoginModule運行所需要的信息;

(5) LoginContext的login方法將調用LoginModule的login方法,確定用戶(hù)身份。該方法將設置相關(guān)的回調,并由回調處理器CallbackHandler來(lái)管理登陸處理回調;

(6) LoginModule的login方法將負責與用戶(hù)進(jìn)行交互(可能是人機交互,也可能是機機交互),如果用戶(hù)輸入信息無(wú)效,則該方 法返回FALSE,一次交互過(guò)程結束,如果用戶(hù)輸入信息有效,則該方法將設置Principal對象的Subject對象,并返回TRUE;當然 LoginModule也可以將與用戶(hù)之間的所有交互過(guò)程全部委托給處理器CallbackHandler來(lái)處理。如果登陸成功, LoginContext將調用LoginModule的commit方法將結果提交給LoginModule實(shí)例的內部狀態(tài)。


 在應用程序中使用JAAS驗證通常會(huì )涉及到以下幾個(gè)步驟:

  1. 創(chuàng )建一個(gè)LoginContext的實(shí)例。

  2. 為了能夠獲得和處理驗證信息,將一個(gè)CallBackHandler對象作為參數傳送給LoginContext。

  3. 通過(guò)調用LoginContext的login()方法來(lái)進(jìn)行驗證。

  4. 通過(guò)使用login()方法返回的Subject對象實(shí)現一些特殊的功能(假設登錄成功)。

  下面是一個(gè)簡(jiǎn)單的例子:

      SimpleLogin.java
      

Java代碼  
  1. package com;  
  2.   
  3. import javax.security.auth.login.LoginContext;  
  4. import javax.security.auth.login.LoginException;  
  5.   
  6. public class SimpleLogin {  
  7.       
  8.     public static void main(String[] args) {  
  9.           
  10.         // 建立登陸上下文,并通過(guò)配置文件初始化,在這里配置文件必須與程序同目錄  
  11.         LoginContext loginContext = null;  
  12.         try {  
  13.                                              
  14.             loginContext = new LoginContext("simple"new SimpleCallbackHandle());  
  15.         } catch (LoginException e) {  
  16.               
  17.             System.out.println(e.getMessage());  
  18.         }  
  19.           
  20.         try {  
  21.               
  22.             // 如果不拋出異常表示驗證成功  
  23.             loginContext.login();  
  24.         } catch (LoginException e) {  
  25.               
  26.         }  
  27.     }  
  28.       
  29. }  

 


   
   SimpleCallbackHandle.java
   

Java代碼  
  1. package com;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import javax.security.auth.callback.Callback;  
  7. import javax.security.auth.callback.CallbackHandler;  
  8. import javax.security.auth.callback.NameCallback;  
  9. import javax.security.auth.callback.PasswordCallback;  
  10. import javax.security.auth.callback.UnsupportedCallbackException;  
  11.   
  12. public class SimpleCallbackHandle implements CallbackHandler {  
  13.   
  14.     public void handle(Callback[] callbacks) throws IOException,  
  15.             UnsupportedCallbackException {  
  16.   
  17.         for (Callback callback : callbacks) {  
  18.   
  19.             if (callback instanceof NameCallback) {  
  20.                 NameCallback nc = (NameCallback) callback;  
  21.                   
  22.                 System.out.print(nc.getPrompt());  
  23.                 System.out.flush();  
  24.                   
  25.                 nc.setName((new BufferedReader(new InputStreamReader(  
  26.                                 System.in))).readLine());  
  27.             } else if (callback instanceof PasswordCallback) {  
  28.                 PasswordCallback pcb = (PasswordCallback) callback;  
  29.                   
  30.                 System.out.print(pcb.getPrompt());  
  31.                 System.out.flush();  
  32.                 pcb.setPassword((new BufferedReader(new InputStreamReader(  
  33.                         System.in))).readLine().toCharArray());  
  34.             }  
  35.         }  
  36.     }  
  37. }  

 

 

 

SimpleLoginModule.java

 

 

Java代碼  
  1. package com;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.Map;  
  5.   
  6. import javax.security.auth.Subject;  
  7. import javax.security.auth.callback.Callback;  
  8. import javax.security.auth.callback.CallbackHandler;  
  9. import javax.security.auth.callback.NameCallback;  
  10. import javax.security.auth.callback.PasswordCallback;  
  11. import javax.security.auth.callback.UnsupportedCallbackException;  
  12. import javax.security.auth.login.LoginException;  
  13. import javax.security.auth.spi.LoginModule;  
  14.   
  15. public class SimpleLoginModule implements LoginModule{  
  16.   
  17.     private String userName;  
  18.       
  19.     private char[] password;  
  20.       
  21.     private Subject subject;  
  22.       
  23.     private CallbackHandler callbackHandler;  
  24.       
  25.     private Map sharedState;  
  26.       
  27.     private Map options;  
  28.       
  29.     private String debug;  
  30.       
  31.     public boolean abort() throws LoginException {  
  32.         System.out.println("abort()");  
  33.         return false;  
  34.     }  
  35.   
  36.     public boolean commit() throws LoginException {  
  37.         System.out.println("commit()");  
  38.         return false;  
  39.     }  
  40.   
  41.     public void initialize(Subject subject, CallbackHandler callbackHandler,  
  42.             Map sharedState, Map options) {  
  43.           
  44.         this.subject = subject;  
  45.         this.callbackHandler = callbackHandler;  
  46.         this.sharedState = sharedState;  
  47.         this.options = options;  
  48.           
  49.         debug = (String)options.get("debug");  
  50.     }  
  51.   
  52.     public boolean login() throws LoginException {  
  53.           
  54.         Callback[] callbacks = new Callback[2];  
  55.         callbacks[0] = new NameCallback("用戶(hù)名: ");  
  56.         callbacks[1] = new PasswordCallback("密碼: "false);  
  57.           
  58.         try {  
  59.               
  60.             callbackHandler.handle(callbacks);  
  61.             userName = ((NameCallback)callbacks[0]).getName();  
  62.             password = ((PasswordCallback)callbacks[1]).getPassword();  
  63.               
  64.             if(debug.equals("true")){  
  65.                 System.out.println("你輸入的用戶(hù)名為:" + userName);  
  66.                 System.out.println("你輸入的密碼為:" + new String(password));  
  67.             }  
  68.               
  69.             if(userName.equals("callan") && new String(password).equals("callanpass")){  
  70.                 System.out.println("驗證成功");  
  71.                 return true;  
  72.             } else {  
  73.                 System.out.println("驗證失敗");  
  74.                 userName = null;  
  75.                 password = null;  
  76.             }  
  77.         } catch (IOException e) {  
  78.             e.printStackTrace();  
  79.         } catch (UnsupportedCallbackException e) {  
  80.             e.printStackTrace();  
  81.         }  
  82.           
  83.         return false;  
  84.     }  
  85.   
  86.     public boolean logout() throws LoginException {  
  87.         System.out.println("logout()");  
  88.         return false;  
  89.     }  
  90.   
  91. }  

 

 

jaas.config

 

Java代碼  
  1. simple {  
  2.    com.SimpleLoginModule required debug=true;  
  3. };  

 

  

將代碼編輯通過(guò)后執行以下命令:

java -Djava.security.auth.login.config==jaas.config com.SimpleLogin

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
jaas認證提供者 - acegi
tomcat下jaas配置實(shí)例
JAAS編程指南(前篇)
擴展JAAS - [Matrix - 與 Java 共舞]
JAAS基礎認證和授權機制
JAAS簡(jiǎn)介(轉載)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久