authenticationmanager是認證核心介面,其作用是驗證客戶端輸入端使用者名稱是否正確
這個介面只有乙個方法
[code]public authentication authenticate(authentication authentication)
throws authenticationexception;[/code]
這個方法就是去驗證使用者名稱 密碼時候正確,那麼使用者名稱密碼在那兒呢?封裝在authentication 類中,這樣在authenticate()方法中就可取到使用者名稱密碼然後去驗證。
驗證使用者名稱密碼的方式是多種多樣的如 dao驗證 ldap驗證,被稱為authenticationprovider,這些provider只要有乙個驗證通過就認為驗證成功。(從別處看來的,未驗證)
authenticationmanager有乙個子類providermanager,用來管理這些provider
其採用迴圈方式執行每個provider
[code]while (iter.hasnext()) catch (authenticationexception ae)
if (result != null)
}}[/code]
迴圈完後,認證結束 返回了乙個authentication例項, 這個authentication例項跟作為引數傳進去的例項有什麼不同呢?
看下面的**
[code]public final authentication authenticate(authentication authrequest)
throws authenticationexception catch (authenticationexception e)
}[/code]
這段**還是不能看到兩個authresult 和authrequest的不同
看下面的**
[code]protected authentication createsuccessauthentication(object principal, authentication authentication,
userdetails user) [/code]
可以看到credentials又被作為結果的一部分返回 。
user.getauthorities是取得使用者的許可權
principal封裝使用者名稱 email等一些使用者資訊
值得注意的是這句,將傳進來的details資料當作結果的一部分返回
result.setdetails(authentication.getdetails());
還有這句
[code]copydetails(authrequest, authresult);
private void copydetails(authentication source, authentication dest)
}[/code]
引數中的details又被重新設定到結果中並返回,如果在驗證過程中details沒有改變。。。。
這個details到底是幹什麼用的呢? 今天先寫到這兒 明天再研究
Acegi 的擴充套件
年剛過,還很懶,這個東東年前都開始關注了,今天把學習成果總結一下。acegi,乙個安全系統,和面向介面的程式設計方式,支援acl jaas基於spring.我的理解其價值在於 replace container managed authentication,將安全這一塊脫離具體j2ee容器,將來需要...
OAuth認證過程
一 什麼是oauth協議 oauth 開放授權 是乙個開放標準。允許第三方 在使用者授權的前提下訪問在使用者在服務商那裡儲存的各種資訊。而這種授權無需將使用者提供使用者名稱和密碼提供給該第三方 oauth允許使用者提供乙個令牌給第三方 乙個令牌對應乙個特定的第三方 同時該令牌只能在特定的時間內訪問特...
WPA認證過程
無線安全 2年前 2015 01 11 9,6170 預共享金鑰模式 概念預共享金鑰可以是8 63之間任意長度的可列印的ascii碼.使用wap加密演算法依賴pairwise master key pmk pmk使用預共享金鑰和ssid進行計算 當客戶端擁有pmk,它就與ap開始協商乙個新的,臨時的...