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

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

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

    OMG,到底在尋找什么..................
    (構(gòu)造一個完美的J2EE系統(tǒng)所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0

    聯(lián)系人管理說明了下列中心的Acegi安全控制能力:

    Role-based security(基于角色的安全)――每個責任人都是某個角色的一員。而角色被用來限制對某些安全對象的訪問。
    Domain object instance security(域?qū)ο髮嵗踩┄D―合同,這個系統(tǒng)里的主要域?qū)ο螅瑩碛幸粋€訪問控制列表(ACL),用來指明誰允許讀、管理和刪除對象。
    Method invocation security(方法調(diào)用安全)――這個 ContactManager服務層對象 包含一些受保護的和公開的方法。
    Web request security(Web請求安全)――這個“/secure”URI路徑被使用Acegi安全保護,使得沒有ROLE_USER 角色的用戶無法訪問。.
    Security unaware application objects(保護未知的應用對象)――受保護的對象與Acegi之間沒有明顯的耦合或契約,所以它們沒有察覺到安全是由Acegi 提供的。*
    Security taglib usage(安全標簽庫使用)――所有的JSP使用Acegi 安全標簽庫來封裝安全信息。*
    Fully declarative security(完全聲明式的安全)――每一個安全方面特性都是在application context里面使用標準的Acegi安全對象來配置的。 *
    Database-sourced security data(支持數(shù)據(jù)庫來源的安全數(shù)據(jù))――所有的用戶、角色和ACL信息都可以從一個兼容JDBC的內(nèi)存數(shù)據(jù)庫獲得。
    Integrated form-based and BASIC authentication(集成基于表單和BASIC驗證)―― 任何BASIC驗證頭部被檢測以及作為驗證使用。默認使用基于表單的普通交互式驗證。
    Remember-me services(記住我的服務)―― Acegi安全的插件式的“remember-me” 策略被演示。在登錄表單里有一個相關(guān)的選擇框與之對應。?

    聯(lián)系人管理的業(yè)務功能描述:

    1.1. 每個用戶登錄后,可以看到一個聯(lián)系人列表。例如,

    marissa's Contacts

    id

    Name

    Email

    1

    John Smith

    john@somewhere.com

    Del

    Admin Permission

    2

    Michael Citizen

    michael@xyz.com



    3

    Joe Bloggs

    joe@demo.com

    Del


    4

    Karen Sutherland

    karen@sutherland.com

    Del

    Admin Permission

    Add

    說明:用戶沒有權(quán)限訪問的聯(lián)系人信息,將不會顯示。

    2.2. 用戶可以增加新的聯(lián)系人信息。

    3.3. 如果有刪除權(quán)限,用戶可以看到在聯(lián)系人后面有一個“ Del ”鏈接。用戶可以點擊這個鏈接來刪除某個聯(lián)系人信息。

    4.4. 如果有管理權(quán)限,用戶可以看到在聯(lián)系人后面有一個“ Admin Permission ”鏈接。用戶可以點擊這個鏈接來管理訪問這個聯(lián)系人的權(quán)限。例如,

    Administer Permissions

    sample.contact.Contact@26807f: Id: 1; Name: John Smith; Email: john@somewhere.com

    -R--- [2] dianne

    Del

    -RW-D [22] peter

    Del

    A---- [1] marissa

    Del

    Add Permission Manage

    說明:每一行記錄包含有 3 列。

    第一列表示權(quán)限,例如,“ -RW-D ”表示可讀、可寫、可刪除。

    第二列也表示權(quán)限,但它是以類似 unix 權(quán)限的數(shù)字表達。例如,“ [22] , 表示可讀、可寫、可刪除。

    第三列是用戶名稱。

    每一行記錄后面都有一個“ Del ”鏈接。點擊這個鏈接,可以刪除掉指定用戶對這個聯(lián)系人信息的權(quán)限。

    5.5. 用戶可以為某個聯(lián)系人信息添加權(quán)限。例如,

    Add Permission

    Contact:

    sample.contact.Contact@1787005: Id: 1; Name: John Smith; Email: john@somewhere.com


    Recipient:


    Permission:


    說明:權(quán)限是動態(tài)添加的。例如,上圖中給用戶 scott 增加了讀聯(lián)系人 John 的權(quán)限。那么 scott 馬上就可以看到聯(lián)系人 John 的信息了。



    功能實現(xiàn)分析

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

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

    e) 密碼加密。這里定義了一個acegi的Md5算法加密對象Md5PasswordEncoder。
    f) 定義了一個jdbcDao實現(xiàn)類。這個類由acegi提供的net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl。這個對象需要一個dataSource的參數(shù)。
    g) 定義daoAuthenticationProvider。這個對象由acegi提供。它有3個屬性:
    authenticationDao。這里指向前面定義的jdbcDao。
    userCache。這里指向后面定義的user緩存對象。
    passwordEncoder。這里指向前面定義的密碼加密對象。
    h) 用戶緩存管理。
    為了緩存user,這里使用spring的ehcache來緩存user。緩存機制:
    i. 定義緩存管理器――CacheManager。這個對象是spring的EhCacheManagerFactoryBean對象
    ii. 定義user緩存實際執(zhí)行對象――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數(shù)據(jù)源的定義。
    b) TransactionManager。這里使用spring的DataSourceTransactionManager對象。
    c) 事務攔截器。這里使用spring的事務攔截器TransactionInterceptor。它有2個屬性:
    transactionManager。這個屬性指向前面定義的TransactionManager。
    transactionAttributeSource。這個屬性里, 指定了ContactManager的各個方法的事務方面的要求。
    d) DataSourcePopulator。
    使用sample.contact.DataSourcePopulator對象,往HSQL里創(chuàng)建相關(guān)的表結(jié)構(gòu)和數(shù)據(jù)。
    實現(xiàn)原理:DataSourcePopulator 實現(xiàn)了接口 InitializingBean。其中afterPropertiesSet方法將在spring初始化DataSourcePopulator后被調(diào)用。
    e) ContactDao。這里指向一個ContactDaoSpring對象。它繼承spring的 JdbcDaoSupport,g) 并實現(xiàn)ContactDao接口。它是真正實現(xiàn)JDBC操作的對象。
    h) ContactManager。這里使用的是spring的ProxyFactoryBean。它有2個屬性:
    i. ProxyInterfaces。代理接口:sample.contact.ContactManager

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

    posted on 2006-10-12 15:37 OMG 閱讀(700) 評論(0)  編輯  收藏 所屬分類: Auth/acegi

    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風云人物

    文檔

    朋友

    相冊

    經(jīng)典網(wǎng)站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人五级毛片免费播放| 婷婷久久久亚洲欧洲日产国码AV| 一级毛片正片免费视频手机看 | 国产免费看JIZZ视频| 成年女人毛片免费播放人| 亚洲国产成人综合| 四虎影视在线永久免费看黄| 免费播放在线日本感人片| 精品丝袜国产自在线拍亚洲| 国产成人亚洲综合| 91在线视频免费播放| 香蕉免费看一区二区三区| 亚洲av成人一区二区三区| 亚洲一区二区三区影院| 在线看片免费不卡人成视频| 国产免费久久久久久无码| tom影院亚洲国产一区二区| 亚洲人成网站在线播放vr| 好爽又高潮了毛片免费下载| 国产午夜精品久久久久免费视| 亚洲欧美日韩国产成人| 亚洲国产精品久久久久| 亚洲日本韩国在线| 最近2019中文字幕mv免费看| 免费成人高清在线视频| 美女黄频视频大全免费的| 亚洲一级毛片免费观看| 久久精品国产亚洲av麻豆| 亚洲乱亚洲乱少妇无码| 国内外成人免费视频| 国产成人精品久久免费动漫| 涩涩色中文综合亚洲| 亚洲三级电影网站| 国产亚洲大尺度无码无码专线 | 免费精品无码AV片在线观看| a级毛片免费观看在线| 亚洲JIZZJIZZ妇女| 国产精品亚洲mnbav网站 | 99视频全部免费精品全部四虎| 叮咚影视在线观看免费完整版| 免费观看亚洲人成网站|