安全認(rèn)證框架_第1頁
安全認(rèn)證框架_第2頁
安全認(rèn)證框架_第3頁
安全認(rèn)證框架_第4頁
安全認(rèn)證框架_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、安全認(rèn)證框架-Apache Shiro研究心得最近因?yàn)轫?xiàng)目需要,研究了一下Apache Shiro安全認(rèn)證框架,把心得記錄下來。(by西風(fēng)吹雨原創(chuàng)) HYPERLINK .en/s/blog_6638b10d0100pd88.html .en/s/blog_6638b10d0100pd88.htmlApache Shrio是一個安全認(rèn)證框架,和Spring Security相比,在于他使用了和比較 簡潔易懂的認(rèn)證和授權(quán)方式。其提供的native-session (即把用戶認(rèn)證后的授權(quán)信息保存 在其自身提供Session中)機(jī)制,這樣就可以和HttpSession、EJB Session Bea

2、n的基于容 器的Session脫耦,到到和客戶端應(yīng)用、Flex應(yīng)用、遠(yuǎn)程方法調(diào)用等都可以使用它來配置 權(quán)限認(rèn)證。1、sessionMode在普通的WEB項(xiàng)目中,我們可以選擇使用native session或者是HttpSession,通過 設(shè)置 securityManager 的 sessionMode 參數(shù)為 http 或 native 即可。2、realm我們可以基于jdbc,ldap,text,activeDirectory,jndi等多種方式來獲取用戶基本 信息,角色信息,權(quán)限信息等。只需要在securityManager中指定使用相應(yīng)的realm實(shí)現(xiàn)即 可,其在這各方面都提供了對應(yīng)的

3、缺省實(shí)現(xiàn),比如我們常用的基于數(shù)據(jù)庫表的形式來配置用 戶權(quán)限信息,就可以使用其缺省實(shí)現(xiàn)的jdbcRealm(org.apache.shiro.realm.jdbc.JdbcRealm)。當(dāng)然,如果認(rèn)證信息來自于多方面,多個 不同的來源(比如來自兩個庫中,或者一個數(shù)據(jù)庫,一個是ldap,再配上一個缺省的基于 文本的測試用等等),我們可以為securityManager指定realms參數(shù),即把這一組安全配 置都配置上。各個具體的realm實(shí)現(xiàn)提供了方法來獲取用戶基本信息、角色、權(quán)限等。realm的授權(quán)信息可以存放在Cache中,Cache的名稱可以通過設(shè)置其 authorizationCacheN

4、ame 參數(shù)指定。3、緩存目前Shrio缺省提供了基于ehCache來緩存用戶認(rèn)證信息和授權(quán)信息的實(shí)現(xiàn)。只需要配 置org.apache.shiro.web.mgt.DefaultWebSecurityManager 這個 cacheManager 并設(shè)置給 SecurityManager即可。如果項(xiàng)目中已經(jīng)存在使用的ehCacheManager配置(org.springframework.cache.ehcache.EhCacheManagerFactoryBean),DefaultWebSecurityManager則可以指定使用現(xiàn)有的ehCacheManager,如果不指定,它將自 行使

5、用缺省配置創(chuàng)建一個。同時,也可以設(shè)置cacheManagerConfigFile參數(shù)來指定ehCache 的配置文件。下例中的shiro.authorizationCache是用來存放授權(quán)信息的Cache,我們在配置realm (如 myRealm 或 jdbcReaml)時,把 authorizationCacheName 屬性設(shè)置 shiro.authorizationCache 來對應(yīng)。ehcache.xml當(dāng)我們把securityManager的sessionMode參數(shù)設(shè)置為native時,那么shrio就將用戶的 基本認(rèn)證信息保存到缺省名稱為shiro-activeSessionC

6、ache的Cache中org.apache.shiro.web.mgt.DefaultWebSecurityManager 在 sessionMode 參數(shù)設(shè)置為 native時,缺省使用的是DefaultWebSessionManager來管理Session,該管理類缺省使用 的是使用MemorySessionDAO基于內(nèi)存來保存和操作用戶基本認(rèn)證信息。如果系統(tǒng)內(nèi)的用戶 數(shù)特別多,我們需要使用CacheSessionDao來基于Cache進(jìn)行操作,因此,這里需要顯示配 置一個 sessionManager(org.apache.shiro.web.session.mgt.DefaultWeb

7、SessionManager),并配置該 sessionManager 的 sessionDao 為 CacheSessionDao(org.apache.shiro.session.mgt.eis.CachingSessionDAO, 需用其實(shí)現(xiàn)類 org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO )。配置 CacheSessionDao時,我們可以指定屬性activeSessionsCacheName的名稱來替換掉缺省名 shiro-activeSessionCache。我們再把該 sessionManager 配置給 D

8、efaultWebSecurityManager 就可以了。bean id=sessionManagerclass=org.apache.shiro.web.session.mgt.DefaultWebSessionManager 從以上我們可以看出a、我們可以指定sessionManager的sessionDao,在某些情況下,我們也可以通過實(shí)現(xiàn) 自定義的sessionDao來把用戶認(rèn)證信息保存在memcache, mongodb, ldap, database中, 達(dá)到和其他應(yīng)用共享用戶認(rèn)證信息的目的,以此達(dá)到SSO的目的(當(dāng)然,sessionld得一致, 這個屬于我們可以在應(yīng)用商定怎么設(shè)

9、定一致的sessionld的問題)。b、cacheManager我們也可以自己實(shí)現(xiàn)一個,可以根據(jù)應(yīng)用情況來考慮,比如存放在 memcache 中之類。4、配置Web項(xiàng)目中,普通的web項(xiàng)目可以采用ini文件來對shiro進(jìn)行配置?;趕pring的 項(xiàng)目可以采用和Spring集成的方式配置?;赟pring集成的Web項(xiàng)目的基本配置文件如下: bean id=securityManagerclass=org.apache.shiro.web.mgt.DefaultWebSecurityManager!- If you dont have a pre-built net.sf.ehcache.C

10、acheManager instance to inject, but you wanta specific Ehcache configuration to be used, specify that here. If you dont, a defaultwill be used.: ! property name=filterChainDefinitions/login = authc/account = user/manage = user,rolesadmin5、基于url資源的權(quán)限管理我們可以簡單配置在shiroFilter的filterChainDefinitions中,也可以考

11、慮通過一 個文本文件,我們讀入內(nèi)容后設(shè)置進(jìn)去?;蛘咄ㄟ^Ini類來裝入Ini文件內(nèi)容,到時取出 urls的部分來設(shè)置給shiroFilter的filterChainDefinitions。也可以把這部分?jǐn)?shù)據(jù)存入 數(shù)據(jù)庫表中,到時讀出一個Map來設(shè)置給shiroFilter的filterChainDefinitionsMap屬性。6、url的配置authc是認(rèn)證用戶(rememberMe的用戶也必須再次登錄才能訪問該url),配置成user 才能讓rememberMe用戶也可以訪問。7、rememberMe Cookie 的處理Shiro 有一套缺省機(jī)制,由 CookieRememberMeMan

12、ager 實(shí)現(xiàn)。其有一個SimpleCookie類,保存對應(yīng)的用戶信息等。每次保存時,系統(tǒng)把SimpleCookie 的信息設(shè)置好之后,先用DefaultSerializer把其用jvm缺省序列化方式序列化成byte, 然后再用cipherService (缺省是aes加密算法)來加密該byte 口,最后用 Base64.encodeToString(serialized)壓縮成一個字符串,再寫入名稱為 rememberMe 的 Cookie 中。讀取時,通過把該 rememberMe Cookie 的內(nèi)容用 byte decoded = Base64.decode(base64) 解壓出該b

13、yte 口,再用cipherService解密,最后用DefaultSerializer反序列化出來該 SimpleCookie 類。如果我們有自定義的rememberMe Cookie需要處理,特別是在和其他網(wǎng) 站一起SSO,通過訪問主域的Cookie來獲取記錄的用戶信息時,我們需 要重新實(shí)現(xiàn)rememberMeManager (可以考慮繼承 AbstractRememberMeManager),和根據(jù)實(shí)際用的序列化方式 Serializer 來實(shí)現(xiàn)一個(比如考慮通用性,用json方式序列化)。在Spring配置 中,配置好 RememberMeManager,裝配上 sericerlizer 和 cipherService (根據(jù)實(shí)際

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論