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

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

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

    Vincent

    Vicent's blog
    隨筆 - 74, 文章 - 0, 評論 - 5, 引用 - 0
    數據加載中……

    acegi-security-sample-contacts-filter例子學習(二)

    功能實現分析

    這個例子使用了HSQL做數據庫,spring的AOP作為基礎,使用Acegi做安全控制組件。
    聯系人管理的web應用在啟動時候,會做一系列初始化動作:
    1. 讀取web.xml文件,

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

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

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

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

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

    posted on 2006-09-01 13:45 Binary 閱讀(891) 評論(0)  編輯  收藏 所屬分類: Acegi

    主站蜘蛛池模板: 永久免费毛片手机版在线看| 青青草a免费线观a| 国产亚洲日韩在线三区| 九九精品国产亚洲AV日韩| 两个人的视频高清在线观看免费| 亚洲图片激情小说| 成年人免费的视频| 亚洲成年网站在线观看| 国产精品成人免费一区二区| 亚洲综合av一区二区三区| 日韩人妻无码免费视频一区二区三区 | 亚洲色欲色欱wwW在线| 毛片A级毛片免费播放| 亚洲变态另类一区二区三区| 免费一级做a爰片性色毛片| 一级女性全黄久久生活片免费| 亚洲男人在线无码视频| 最近免费中文字幕MV在线视频3| 亚洲av无码一区二区三区网站 | 热99re久久免费视精品频软件| 噜噜综合亚洲AV中文无码| 亚洲成A∨人片天堂网无码| 成人免费无码H在线观看不卡| 亚洲国产精品嫩草影院在线观看| 久久久久国产精品免费免费不卡| 亚洲黄网在线观看| 免费毛片在线播放| a级毛片100部免费观看| va天堂va亚洲va影视中文字幕| 精品久久洲久久久久护士免费| 一级毛片一级毛片免费毛片| 久久久久亚洲AV片无码| 好吊妞视频免费视频| 久久久久久久国产免费看| 亚洲高清视频免费| 免费国产在线观看| 国产四虎免费精品视频| 色妞www精品视频免费看| 色播亚洲视频在线观看| 国产在线观看免费完整版中文版 | 亚洲av无码潮喷在线观看|