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

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

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

開(kāi)通VIP
理解基于A(yíng)cegi的權限控制系統(圖)

理解基于A(yíng)cegi的權限控制系統(圖)

                                      

原文:http://dev.yesky.com/127/2688127.shtml  作者:黎小紅

注:Spring框架是一個(gè)優(yōu)秀的多層J2EE系統框架,Spring本身沒(méi)有提供對系統的安全性支持。

  摘 要 Spring框架是一個(gè)優(yōu)秀的多層J2EE系統框架,Spring本身沒(méi)有提供對系統的安全性支持。Acegi是基于Spring IOC 和 AOP機制實(shí)現的一個(gè)安全框架。本文探討了Acegi安全框架中各部件之間的交互,并通過(guò)擴展Acegi數據庫設計來(lái)實(shí)現基于Spring框架的應用的安全控制方法。
  關(guān)鍵詞 Spring ;Acegi ;認證; 授權

  引言
  近年來(lái),隨著(zhù)Internet技術(shù)的迅猛發(fā)展,計算機網(wǎng)絡(luò )已深入到了人們的工作、學(xué)習和日常生活中,于是,怎樣構建安全的web應用也成為了當前最熱門(mén)的話(huà)題。Spring是一個(gè)基于IoC(Inversion of Control)和AOP(Aspect Oriented Programming)的構架多層J2EE應用系統的框架。Spring框架正在以其優(yōu)良的特性吸引了越來(lái)越多的開(kāi)發(fā)人員的關(guān)注,并在大量的系統開(kāi)發(fā)中被使用。然而,現有的Spring框架本身并沒(méi)有提供對系統安全性的支持,本文通過(guò)介紹一種可用于Spring框架中的安全框架Acegi,并對在Spring框架中使用Acegi實(shí)現安全用戶(hù)認證和資源授權控制進(jìn)行了較深入的研究和擴展,同時(shí)給出了可行的解決方案。

  Spring框架和Acegi安全框架介紹

  1、spring 框架

  Spring框架是由Open Source開(kāi)發(fā)的一個(gè)優(yōu)秀的多層J2EE系統框架,它為企業(yè)級應用提供了一個(gè)非常輕量級的解決方案,大大地降低了應用開(kāi)發(fā)的難度與復雜度,提高了開(kāi)發(fā)的速度?! ?u>Spring框架的核心是IoC和AOP。IoC是一種設計模式,即IoC模式。IoC模式進(jìn)一步降低了類(lèi)之間的耦合度,并且改變了傳統的對象的創(chuàng )建方法,實(shí)現了一種配置式的對象管理方式,Spring框架中由IoC容器負責配置性的對象的管理。IoC模式極大的提高了系統開(kāi)發(fā)與維護的靈活性。
  AOP是一種編程模式,它是從系統的橫切面關(guān)注問(wèn)題。傳統的面向對象編程O(píng)OP主要從系統的垂直切面對問(wèn)題進(jìn)行關(guān)注,對于系統的橫切面關(guān)注很少,或者說(shuō)很難關(guān)注,這樣當考慮到系統的安全性、日志、事務(wù)以及其他企業(yè)級服務(wù)時(shí),OOP就無(wú)能為力了,只能在所有相關(guān)類(lèi)中加入類(lèi)似的系統服務(wù)級的代碼。AOP為解決系統級服務(wù)問(wèn)題提供了一種很好的方法。AOP將系統服務(wù)分解成方面看待,并為類(lèi)提供一種聲明式系統服務(wù)方式。Java類(lèi)不需要知道日志服務(wù)的存在也不需要考慮相關(guān)的代碼。所以,用AOP編寫(xiě)的應用程序是松耦合的,代碼的復用性就提高了。

  2、Acegi 安全框架

  借助于Spring框架,開(kāi)發(fā)者能夠快速構建結構良好的WEB應用,但現有的Spring框架本身沒(méi)有提供安全相關(guān)的解決方案。同樣來(lái)自于Open Source 社區的Acegi安全框架為實(shí)現基于Spring框架的WEB應用的安全控制提供了一個(gè)很好的解決方案。Acegi本身就是利用Spring提供的IoC和AOP機制實(shí)現的一個(gè)安全框架,它將安全性服務(wù)作為J2EE平臺中的系統級服務(wù),以AOP Aspect形式發(fā)布。所以借助于A(yíng)cegi安全框架,開(kāi)發(fā)者能夠在Spring使能應用中采用聲明式方式實(shí)現安全控制。
  Acegi安全框架主要由安全管理對象、攔截器以及安全控制管理組件組成。安全管理對象是系統可以進(jìn)行安全控制的實(shí)體,Acegi框架主要支持方法和URL請求兩類(lèi)安全管理對象;攔截器是Acegi中的重要部件,用來(lái)實(shí)現安全控制請求的攔截,針對不同的安全管理對象的安全控制請求使用不同的攔截器進(jìn)行攔截;安全控制管理部件是實(shí)際實(shí)現各種安全控制的組件,對被攔截器攔截的請求進(jìn)行安全管理與控制,主要組件包括實(shí)現用戶(hù)身份認證的AuthenticationManager、實(shí)現用戶(hù)授權的AccessDecisionManager以及實(shí)現角色轉換的RunAsManager。安全管理對象、攔截器以及安全控制管理組件三者關(guān)系如圖1所示。

  Acegi安全框架在基于Spring框架的系統中的應用

  1、分析系統安全性需求:
  首先,需要明確進(jìn)行安全控制的對象,可為業(yè)務(wù)方法和URL資源。
  其次,需要進(jìn)一步明確,系統身份認證資料和資源授權信息的數據持久化形式。
  2、Acegi安全系統數據庫設計:
  在A(yíng)cegi框架中支持多種安全信息的持久化方式,可以在配置文件中配置或存放在關(guān)系數據庫。由于在實(shí)際應用中,需求是經(jīng)常發(fā)生變化的。所以,在配置文件中配置是滿(mǎn)足不了實(shí)際應用需求的。然而,Acegi本身對權限表的設計非常簡(jiǎn)單,users表{username,password,enabled} 和authorities表{username,authority},這樣簡(jiǎn)單的設計肯定無(wú)法適用復雜的權限需求。為了解決權限管理的復雜性,在這里引入了role(角色)的概念,使得用戶(hù)和權限分離,一個(gè)用戶(hù)擁有多個(gè)角色,一個(gè)角色擁有多個(gè)相應的權限,這樣就更靈活地支持安全策略?! ⊥瑫r(shí),為了更好地配合Acegi安全框架,還引入resource(資源)的概念,資源可分為URL和FUNCTION(方法)兩種,一個(gè)權限可以對應多個(gè)資源。具體的數據庫設計見(jiàn)圖2。


圖1 安全管理對象,攔截器和安全管理組件交互圖

圖2 Acegi安全控制系統數據庫設計
  3、認證管理器,授權管理器的配置:
  實(shí)現系統的安全控制,首先需要對系統的安全管理器和授權管理器進(jìn)行配置,系統進(jìn)行認證和授權需要獲取安全信息,Acegi本身提供了對認證信息的獲取機制,在實(shí)現認證與授權過(guò)程中,系統將主動(dòng)根據配制信息和相應的信息解釋安全信息的讀取。圖3給出了一個(gè)將用戶(hù)安全信息存儲在數據庫中的認證管理器的配置示意圖。
  對應于圖示的XML配置文件的代碼如下:

/* 配置數據庫datasource 和Acegi 的 jdbcDao */
<bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>
?。紁roperty name=”driverClassName”>
 ?。紇alue>${jdbc.driverClassName}</value>
?。?property>
?。紁roperty name=”url”>
 ?。紇alue>${jdbc.url}</value>
?。?property>



圖3 認證管理器配制示意圖


<property name=”username”>
?。紇alue>${jdbc.username}</value>
</property>
<property name=”password”>
?。紇alue>${jdbc.password}</value>
</property>
</bean>
<bean id=”jdbcDaoImpl” class=”org.acegisecurity. roviders. dao.jdbc.JdbcDaoImpl”>
?。紁roperty name=”dataSource”>
 ?。紃ef bean=”dataSource”/>
?。?property>
</bean>

/*配置用戶(hù)信息的加密算法*/
<bean id=”passwordEncoder”
Class=”org.acegisecurity.providers.encoding.Md5passwordEncoder”/>
/*配置緩存有效時(shí)間*/
<bean id=”userCache” class=”org.acegiSecurity. providers. dao.cache.EhCacheBasedUserCache”>
 …//這里對緩存有效時(shí)間進(jìn)行設置
</bean>

/*配置daoAuthenticationProvider*/
<bean id=”daoAuthenticationProvider”
class=”org.acegisecurity.providers.dao.DaoAuthenticationProvider”>
?。紁roperty name=”authenticationDao”>
 ?。紃ef local=”JdbcDaoImpl”/>
?。?property>
?。紁roperty name=”passwordEncoder”>
 ?。紃ef local=” passwordEncoder”/>
?。?property>
?。紁roperty name=”userCache”>
 ?。紃ef local=” userCache”/>
?。?property>

</bean>

/*配置認證管理器*/
<bean id=”authenticationManager” class=”org.acegisecurity. providers.ProviderManager”>
?。紁roperty name=”providers”>
 ?。糽ist>
  ?。紃ef local=”daoAuthenticationProvider”/>
 ?。?list>
?。?property>
</bean>

  授權管理器的配置方法與認證管理器的配置基本類(lèi)似,這里不再討論。

  4、安全請求攔截器的配置
  以上配置完成后,就需要配置安全攔截器。不同的安全管理對象需要使用不同的安全攔截器。對于方法級的安全認證需要使用的攔截器為MethodSecurityInterceptor,而應用于URL資源的安全攔截器為FilterSecurityInterceptor 。其中,MethodSecurityInterceptor攔截器是借助于Spring Aop實(shí)現的,而FilterSecurityInterceptor攔截器是借助于Servlet Filter 實(shí)現的。本文以URL資源請求的安全攔截器為例說(shuō)明配置情況。
  由于URL資源請求安全攔截是借助于過(guò)濾器進(jìn)行的。因此首先要配置Acegi Servlet過(guò)濾器。過(guò)濾器類(lèi)似于A(yíng)OP Around裝備,實(shí)現在web資源調用前后進(jìn)行的一些操作6種過(guò)濾器,他們依次構成Servlet過(guò)濾器鏈,依次處理客戶(hù)請求。需要注意的是過(guò)濾器配置的順序是不能交換的,當不需要使用某個(gè)過(guò)濾器時(shí),可直接將其刪除和注釋。過(guò)濾器在web.xml中配置形式為

<filter>
?。糵ilter-name>Acegi HTTP Request Security Filter</filter-name>
?。糵ilter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
?。糹nit-param>
 ?。紁aram-name>targetClass</param-name>
 ?。紁aram-value>
   Org.acegisecurity.intercept.web.SecurityEnforcementFilter
 ?。?param-value>
?。?init-param>
</filter>
<filter-mapping>
?。糵ilter-name>Acigi HTTP Request Security Filter</filter-name>
?。紆rl-pattern>/*</url-pattern>
</filter-mapping>

  在spring applicationContext.xml文件中的配置形式為

<bean id=”securityEnforcementFilter” class=””>
?。紁roperty name=”filterSecurityInterceptor”>
 ?。紃ef bean=”filterInvocationInteceptor”/>
?。?property>
?。紁roperty name=”authenticationEntryPoint”>
 ?。紃ef bean=”authenticationProcessingFilterEntryPoint”/>
?。?property>

  以上代碼是SecurityEnforcementFilter的配置,該過(guò)濾器對用戶(hù)是否有權訪(fǎng)問(wèn)web資源作出最后的決定。其它的過(guò)濾器的配置類(lèi)同。配置完過(guò)濾器后,需要對攔截器FilterSecurityInterceptor進(jìn)行配置,

<bean id=”filterInvocationInterceptor”
Class=””>
?。紁roperty name=”authenuserCacheticationManager”>1
?。紁roperty name=”accessDecisionManager”>
?。紁roperty name=”objectDefinitionSource”>
 ?。紃ef local="filterObjectDefinitionSource"/>
?。?property>
<bean id="filterObjectDefinitionSource"
class="org.xiaohongli.acegi.db.DBFilterObjectDefinitionSource">
?。糲onstructor-arg><refbean="jdbcTemplate"/>
?。?constructor-arg>
</bean>

  objectDefinitionSource屬性定義了那些受保護的URL資源,其中引用了一個(gè)本地對象filterObjectDefinitionSource。filterObjectDefinitionSource類(lèi)從數據庫中讀取需要保護的URL安全信息,它擴展了PathBasedFilterInvocationDefinition Map類(lèi)。同樣,實(shí)現了另外一個(gè)methodObjectDefinitionSource類(lèi)從數據庫中讀取需要保護的FUNCTION資源,它擴展了MethodDefinitionMap類(lèi)。限于篇幅,在這里就不列出具體實(shí)現的源代碼。

<bean id="methodObjectDefinitionSource"
class="org.xiaohongli.acegi.db.DBMethodObjectDefinitionSource">
<constructor-arg><refbean="jdbcTemplate"/>
</constructor-arg>
</bean>


  結束語(yǔ)
  由于Spring在越來(lái)越多的項目中的應用,因此基于Spring應用的安全控制系統的研究就顯得非常重要。Acegi提供了對Spring應用安全的支持,然而 Acegi本身提供的實(shí)例并不能滿(mǎn)足大規模的復雜的權限需求,本文通過(guò)擴展Acegi的數據庫設計即可滿(mǎn)足復雜的權限需求。然而,怎樣將Acegi應用到非Spring的系統中,還有待進(jìn)一步研究。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Spring框架和Acegi安全框架介紹
Spring安全系統:Acegi Security
基于shiro框架實(shí)現自動(dòng)登錄(rememberMe)
使用 Spring 更好地處理 Struts 動(dòng)作
用Acegi為你的Spring應用加把鎖!
WIKI IREMIA: DWRandAcegi
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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