資源描述:
《Apache Shiro 使用手冊》由會員上傳分享,免費在線閱讀,更多相關內容在學術論文-天天文庫。
1、----------專業(yè)最好文檔,專業(yè)為你服務,急你所急,供你所需-------------文檔下載最佳的地方一、什么是Shiro?ApacheShiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理等功能:?·認證-用戶身份識別,常被稱為用戶“登錄”;·授權-訪問控制;·密碼加密-保護或隱藏數據防止被偷窺;·會話管理-每用戶相關的時間敏感的狀態(tài)。對于任何一個應用程序,Shiro都可以提供全面的安全管理服務。并且相對于其他安全框架,Shiro要簡單的多。?二、Shiro的架構介紹?首先,來了解一下Shiro的三個核心組件:Subject,SecurityMana
2、ger和Realms.如下圖:??Subject:即“當前操作用戶”。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方進程、后臺帳戶(DaemonAccount)或其他類似事物。它僅僅意味著“當前跟軟件交互的東西”。但考慮到大多數目的和用途,你可以把它認為是Shiro的“用戶”概念。?Subject代表了當前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。?SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內部組件實例,并通過它來提供安全管理的各種服務。
3、?Realm:Realm充當了Shiro與應用安全數據間的“橋梁”或者“連接器”。也就是說,當對用戶執(zhí)行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。?從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節(jié),并在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用于認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。?----------專業(yè)最好文檔,專業(yè)為你服務,急你所急,供你所需-------------文檔下載最佳的地方----------專業(yè)最好文檔,專
4、業(yè)為你服務,急你所急,供你所需-------------文檔下載最佳的地方Shiro內置了可以連接大量安全數據源(又名目錄)的Realm,如LDAP、關系數據庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數據源的自己的Realm實現。?Shiro完整架構圖:??除前文所講Subject、SecurityManager、Realm三個核心組件外,Shiro主要組件還包括:?Authenticator:認證就是核實用戶身份的過程。這個過程的常見例子是大家都熟悉的“用戶/密碼”組合。多數用戶在登錄軟件系統(tǒng)時,通常提供自己的
5、用戶名(當事人)和支持他們的密碼(證書)。如果存儲在系統(tǒng)中的密碼(或密碼表示)與用戶提供的匹配,他們就被認為通過認證。?Authorizer:授權實質上就是訪問控制-控制用戶能夠訪問應用中的哪些內容,比如資源、Web頁面等等。?SessionManager:在安全框架領域,ApacheShiro提供了一些獨特的東西:可在任何應用或架構層一致地使用SessionAPI。即,Shiro為任何應用提供了一個會話編程范式-從小型后臺獨立應用到大型集群Web應用。這意味著,那些希望使用會話的應用開發(fā)者,不必被迫使用Servlet或EJB容器了?;蛘?,如果正在使用這些容器,開發(fā)者現在也可以選擇
6、使用在任何層統(tǒng)一一致的會話API,取代Servlet或EJB機制。?----------專業(yè)最好文檔,專業(yè)為你服務,急你所急,供你所需-------------文檔下載最佳的地方----------專業(yè)最好文檔,專業(yè)為你服務,急你所急,供你所需-------------文檔下載最佳的地方CacheManager:對Shiro的其他組件提供緩存支持。?認證就是驗證用戶身份的過程。在認證過程中,用戶需要提交實體信息(Principals)和憑據信息(Credentials)以檢驗用戶是否合法。最常見的“實體/憑證”組合便是“用戶名/密碼”組合。?一、Shiro認證過程?1、收集實體/憑
7、據信息?Java代碼??1.//Example?using?most?common?scenario?of?username/password?pair:??2.UsernamePasswordToken?token?=?new?UsernamePasswordToken(username,?password);??3.//”Remember?Me”?built-in:??4.token.setRememberMe(true);??UsernamePasswordTo