<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個(gè)人空間

    功能實(shí)現(xiàn)分析

    這個(gè)例子使用了HSQL做數(shù)據(jù)庫,spring的AOP作為基礎(chǔ),使用Acegi做安全控制組件。
    聯(lián)系人管理的web應(yīng)用在啟動(dòng)時(shí)候,會(huì)做一系列初始化動(dòng)作:
    1. 讀取web.xml文件,

    2. 并解析文件里的內(nèi)容。
    a) context-param元素。
    i. contextConfigLocation屬性。這個(gè)屬性定義了spring所需要的3個(gè)屬性文件。它們分別是:applicationContext -acegi-security.xml、applicationContext-common-business.xml、 applicationContext-common-authorization.xml
    ii. log4jConfigLocation屬性。這個(gè)屬性定義了log4j配置文件。

    b) filter元素。
    這里定義了acegi的一個(gè)過濾器。Acegi的大部分過濾器都是這樣配置的。使用FilterToBeanProxy組件,給它傳遞一個(gè)targetClass屬性。這個(gè)targetClass必須實(shí)現(xiàn)javax.servlet.Filter接口。
    這里配置的是FilterChainProxy。這個(gè)FilterChainProxy比較好用,可以為它定義一串filter屬性。這些filter將會(huì)按照定義的順序被調(diào)用。例如,
    <bean id="filterChainProxy" class="net.sf.acegisecurity.util.FilterChainProxy">
    <property name="filterInvocationDefinitionSource">
    <value>
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_APACHE_ANT
    /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
    </value>
    </property>
    </bean>
    這個(gè)過濾器的mapping是“/*”。
    c) listener元素。
    i. ContextLoaderListener。這個(gè)是Spring使用來加載根applicationcontext。并分別解析 applicationContext-acegi-security.xml、applicationContext-common- business.xml、applicationContext-common-authorization.xml等配置文件,把相關(guān)的對象初始化
    iii. Log4jConfigListener。這個(gè)是spring用來初始化log4j組件的listener。
    iv. HttpSessionEventPublisher。這個(gè)組件將發(fā)布HttpSessionCreatedEvent和HttpSessionDestroyedEvent事件給spring的applicationcontext。
    d) servlet元素。
    i. contacts。這里采用了spring的MVC框架, 所以這個(gè)servlet是spring MVC的一個(gè)核心控制器(org.springframework.web.servlet.DispatcherServlet)。這個(gè)servlet 啟動(dòng)時(shí)候,會(huì)從contacts-servlet.xml里面讀取信息,并做相關(guān)的初始化。
    v. remoting。也是spring MVC的一個(gè)核心控制器。與contacts不同,這個(gè)servlet主要是提供web services服務(wù)。這個(gè)servlet啟動(dòng)時(shí)候, 會(huì)從remoting-servlet.xml里面讀取信息,并做相關(guān)的初始化。
    e) taglib元素。這里定義了spring的標(biāo)f) 簽庫。
    3. 解析applicationContext-acegi-security.xml。
    a) 過濾器鏈。定義了一個(gè)FilterChainProxy,b) 并指c) 定了一系列的過濾器鏈。httpSessionContextIntegrationFilter, authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
    d) 認(rèn)證管理器。這個(gè)管理器由acegi提供。這個(gè)管理器需要一個(gè)providers參數(shù)。這個(gè)providers參數(shù)包含了提供系統(tǒng)認(rèn)證的對象。
    i. daoAuthenticationProvider。一般用戶認(rèn)證。
    ii. anonymousAuthenticationProvider。匿名用戶認(rèn)證。
    iv. rememberMeAuthenticationProvider。記住我認(rèn)證。

    e) 密碼加密。這里定義了一個(gè)acegi的Md5算法加密對象Md5PasswordEncoder。
    f) 定義了一個(gè)jdbcDao實(shí)現(xiàn)類。這個(gè)類由acegi提供的net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl。這個(gè)對象需要一個(gè)dataSource的參數(shù)。
    g) 定義daoAuthenticationProvider。這個(gè)對象由acegi提供。它有3個(gè)屬性:
    authenticationDao。這里指向前面定義的jdbcDao。
    userCache。這里指向后面定義的user緩存對象。
    passwordEncoder。這里指向前面定義的密碼加密對象。
    h) 用戶緩存管理。
    為了緩存user,這里使用spring的ehcache來緩存user。緩存機(jī)制:
    i. 定義緩存管理器――CacheManager。這個(gè)對象是spring的EhCacheManagerFactoryBean對象
    ii. 定義user緩存實(shí)際執(zhí)行對象――UserCacheBackend。這個(gè)對象是spring的EhCacheFactoryBean。它有兩個(gè)屬性:
    1. cacheManager。這里指向前面定義的緩存管理器。
    2. cacheName。
    iii. 定義user緩存――UserCache。它是acegi提供的EhCacheBasedUserCache對象。它有一個(gè)屬性:
    1. cache。這里指向的是前面定義的userCacheBackend。

    i) 定義接收來自DaoAuthenticationProvider的認(rèn)證事件的listener――LoggerListener。
    j)
    4. 解析applicationContext-common-business.xml。
    a) dataSource.
    這里使用了spring的DriverManagerDataSource對象。這個(gè)對象是一個(gè)JDBC數(shù)據(jù)源的定義。
    b) TransactionManager。這里使用spring的DataSourceTransactionManager對象。
    c) 事務(wù)攔截器。這里使用spring的事務(wù)攔截器TransactionInterceptor。它有2個(gè)屬性:
    transactionManager。這個(gè)屬性指向前面定義的TransactionManager。
    transactionAttributeSource。這個(gè)屬性里, 指定了ContactManager的各個(gè)方法的事務(wù)方面的要求。
    d) DataSourcePopulator。
    使用sample.contact.DataSourcePopulator對象,往HSQL里創(chuàng)建相關(guān)的表結(jié)構(gòu)和數(shù)據(jù)。
    實(shí)現(xiàn)原理:DataSourcePopulator 實(shí)現(xiàn)了接口 InitializingBean。其中afterPropertiesSet方法將在spring初始化DataSourcePopulator后被調(diào)用。
    e) ContactDao。這里指向一個(gè)ContactDaoSpring對象。它繼承spring的 JdbcDaoSupport,g) 并實(shí)現(xiàn)ContactDao接口。它是真正實(shí)現(xiàn)JDBC操作的對象。
    h) ContactManager。這里使用的是spring的ProxyFactoryBean。它有2個(gè)屬性:
    i. ProxyInterfaces。代理接口:sample.contact.ContactManager

    ii. InterceptorNames。攔截器名稱。可以有多個(gè),iv. 這里包括:transactionInterceptor、contactManagerSecurity、contactManagerTarget。其中,v. transactionInterceptor是前面定義的事務(wù)攔截器。ContactManagerSecurity則是在 applicationContext-common-authorization.xml里定義的方法調(diào)用授權(quán)。
    i) ContactManagerTarget。這里指向的是sample.contact.ContactManagerBackend對象。 ContactManagerBackend實(shí)現(xiàn)了ContactManager接口和InitializingBean接口。它有2個(gè)自定義屬性: contactDao和basicAclExtendedDao。這里會(huì)調(diào)用ACL的API去做些創(chuàng)建權(quán)限和刪除權(quán)限的工作。



    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護(hù)己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
    http://www.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-19 19:56 宋針還 閱讀(500) 評論(0)  編輯  收藏 所屬分類: ACEGI
    主站蜘蛛池模板: 成在人线AV无码免费| 国产精品免费一级在线观看| 99在线热视频只有精品免费| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | h在线看免费视频网站男男| 久久久久av无码免费网| 四虎永久免费地址在线网站| 内射干少妇亚洲69XXX| 无码毛片一区二区三区视频免费播放 | 亚洲精品GV天堂无码男同| 美女在线视频观看影院免费天天看| 在线免费视频一区| 亚洲蜜芽在线精品一区| a在线视频免费观看在线视频三区| 亚洲精品成人网久久久久久| 欧美色欧美亚洲另类二区| 精品无码无人网站免费视频 | 一本一道dvd在线观看免费视频| 免费精品人在线二线三线区别| 久久夜色精品国产亚洲AV动态图| 国产成人亚洲毛片| 国产成人免费爽爽爽视频| 亚洲Av永久无码精品一区二区| 波多野结衣视频在线免费观看| 中日韩亚洲人成无码网站| 97热久久免费频精品99| 亚洲欧洲在线播放| 91免费在线播放| 亚洲风情亚Aⅴ在线发布| 国产亚洲欧洲Aⅴ综合一区 | 爽爽爽爽爽爽爽成人免费观看| 免费在线观看黄网| 永久在线观看免费视频| 亚洲男人的天堂www| 色老头综合免费视频| 久久伊人久久亚洲综合| 日本高清免费中文字幕不卡| 亚洲国产精品18久久久久久| 国产亚洲成av片在线观看 | 成人无码精品1区2区3区免费看| 一区国严二区亚洲三区|