ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国内精品视频,a黄色在线观看,国产99久久精品一区二区永久免费http://www.aygfsteel.com/lijiajia418/category/14736.htmlVicent's blogzh-cnWed, 28 Feb 2007 03:40:59 GMTWed, 28 Feb 2007 03:40:59 GMT60acegi-security-sample-contacts-filter例子学习(äº?http://www.aygfsteel.com/lijiajia418/archive/2006/09/01/67083.htmlBinaryBinaryFri, 01 Sep 2006 05:45:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/09/01/67083.htmlhttp://www.aygfsteel.com/lijiajia418/comments/67083.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/09/01/67083.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/67083.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/67083.html功能实现分析

˜q™ä¸ªä¾‹å­ä½¿ç”¨äº†HSQL做数据库åQŒspringçš„AOPä½œäØ“åŸºç¡€åQŒä‹É用Acegi做安全控制组件ã€?br />联系人管理的web应用在启动时候,会做一¾pÕdˆ—初始化动作:
1. è¯Õd–web.xmlæ–‡äšgåQ?/p>

2. òq¶è§£æžæ–‡ä»‰™‡Œçš„内宏V€?br />a) context-param元素ã€?br />i. contextConfigLocation属性。这个属性定义了spring所需要的3个属性文件。它们分别是åQšapplicationContext -acegi-security.xml、applicationContext-common-business.xmlã€?applicationContext-common-authorization.xml
ii. log4jConfigLocation属性。这个属性定义了log4j配置文äšgã€?/p>

b) filter元素ã€?br />˜q™é‡Œå®šä¹‰äº†acegi的一个过滤器。Acegi的大部分˜q‡æ×o器都是这样配¾|®çš„。ä‹É用FilterToBeanProxy¾l„äšgåQŒç»™å®ƒä¼ é€’一个targetClass属性。这个targetClass必须实现javax.servlet.Filter接口ã€?br />˜q™é‡Œé…ç½®çš„æ˜¯FilterChainProxy。这个FilterChainProxy比较好用åQŒå¯ä»¥äؓ它定义一串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>
˜q™ä¸ª˜q‡æ×o器的mapping是â€?*”ã€?br />c) listener元素ã€?br />i. ContextLoaderListener。这个是Spring使用来加载根applicationcontextã€‚åÆˆåˆ†åˆ«è§£æž applicationContext-acegi-security.xml、applicationContext-common- business.xml、applicationContext-common-authorization.xml½{‰é…¾|®æ–‡ä»Óž¼ŒæŠŠç›¸å…³çš„对象初始åŒ?br />iii. Log4jConfigListener。这个是spring用来初始化log4j¾l„äšgçš„listenerã€?br />iv. HttpSessionEventPublisher。这个组件将发布HttpSessionCreatedEventå’ŒHttpSessionDestroyedEvent事äšg¾l™springçš„applicationcontextã€?br />d) servlet元素ã€?br />i. contacts。这里采用了springçš„MVC框架åQ?所以这个servlet是spring MVC的一个核心控制器åQˆorg.springframework.web.servlet.DispatcherServletåQ‰ã€‚这个servlet 启动时候,会从contacts-servlet.xml里面è¯Õd–信息åQŒåƈ做相关的初始化ã€?br />v. remoting。也是spring MVC的一个核心控制器。与contacts不同åQŒè¿™ä¸ªservlet主要是提供web services服务。这个servlet启动时候, 会从remoting-servlet.xml里面è¯Õd–信息åQŒåƈ做相关的初始化ã€?br />e) taglib元素。这里定义了spring的标f) ½{‘Öº“ã€?br />3. 解析applicationContext-acegi-security.xmlã€?br />a) ˜q‡æ×o器链。定义了一个FilterChainProxyåQŒb) òq¶æŒ‡c) 定了一¾pÕdˆ—的过滤器链。httpSessionContextIntegrationFilter, authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
d) 认证½Ž¡ç†å™¨ã€‚这个管理器由acegi提供。这个管理器需要一个providers参数。这个providers参数包含了提供系¾lŸè®¤è¯çš„对象ã€?br />i. daoAuthenticationProvider。一般用戯‚®¤è¯ã€?br />ii. anonymousAuthenticationProvider。匿名用戯‚®¤è¯ã€?br />iv. rememberMeAuthenticationProvider。记住我认证ã€?/p>

e) 密码加密。这里定义了一个acegiçš„Md5½Ž—法加密对象Md5PasswordEncoderã€?br />f) 定义了一个jdbcDao实现¾c…R€‚这个类由acegi提供的net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl。这个对象需要一个dataSource的参数ã€?br />g) 定义daoAuthenticationProvider。这个对象由acegi提供。它æœ?个属性:
authenticationDao。这里指向前面定义的jdbcDaoã€?br />userCache。这里指向后面定义的user¾~“存对象ã€?br />passwordEncoder。这里指向前面定义的密码加密对象ã€?br />h) 用户¾~“å­˜½Ž¡ç†ã€?br />ä¸ÞZº†¾~“å­˜useråQŒè¿™é‡Œä‹É用springçš„ehcache来缓存user。缓存机åˆÓž¼š
i. 定义¾~“å­˜½Ž¡ç†å™¨â€•―CacheManager。这个对象是springçš„EhCacheManagerFactoryBean对象
ii. 定义user¾~“存实际执行对象――UserCacheBackend。这个对象是springçš„EhCacheFactoryBean。它有两个属性:
1. cacheManager。这里指向前面定义的¾~“å­˜½Ž¡ç†å™¨ã€?br />2. cacheNameã€?br />iii. 定义user¾~“存――UserCache。它是acegi提供的EhCacheBasedUserCache对象。它有一个属性:
1. cache。这里指向的是前面定义的userCacheBackend�/p>

i) 定义接收来自DaoAuthenticationProvider的认证事件的listener――LoggerListener�br />j)
4. 解析applicationContext-common-business.xml�br />a) dataSource.
˜q™é‡Œä½¿ç”¨äº†springçš„DriverManagerDataSource对象。这个对象是一个JDBC数据源的定义ã€?br />b) TransactionManager。这里ä‹É用springçš„DataSourceTransactionManager对象ã€?br />c) 事务拦截器。这里ä‹É用spring的事务拦截器TransactionInterceptor。它æœ?个属性:
transactionManager。这个属性指向前面定义的TransactionManagerã€?br />transactionAttributeSource。这个属性里åQ?指定了ContactManager的各个方法的事务斚w¢çš„要求ã€?br />d) DataSourcePopulatorã€?br />使用sample.contact.DataSourcePopulator对象åQŒå¾€HSQL里创建相关的表结构和数据ã€?br />实现原理åQšDataSourcePopulator 实现了接å?InitializingBean。其中afterPropertiesSetæ–ÒŽ³•ž®†åœ¨spring初始化DataSourcePopulator后被调用ã€?br />e) ContactDao。这里指向一个ContactDaoSpring对象。它¾l§æ‰¿springçš?JdbcDaoSupportåQŒg) òq¶å®žçްContactDao接口。它是真正实现JDBC操作的对象ã€?br />h) ContactManager。这里ä‹É用的是springçš„ProxyFactoryBean。它æœ?个属性:
i. ProxyInterfaces。代理接口:sample.contact.ContactManager

ii. InterceptorNames。拦截器名称。可以有多个åQŒiv. ˜q™é‡ŒåŒ…括åQštransactionInterceptor、contactManagerSecurity、contactManagerTarget。其中,v. transactionInterceptor是前面定义的事务拦截器。ContactManagerSecurity则是åœ?applicationContext-common-authorization.xml里定义的æ–ÒŽ³•调用授权ã€?br />i) ContactManagerTarget。这里指向的是sample.contact.ContactManagerBackend对象ã€?ContactManagerBackend实现了ContactManager接口和InitializingBean接口。它æœ?个自定义属性: contactDaoå’ŒbasicAclExtendedDao。这里会调用ACLçš„APIåŽÕdšäº›åˆ›å»ºæƒé™å’Œåˆ é™¤æƒé™çš„工作ã€?/p>

Binary 2006-09-01 13:45 发表评论
]]>
acegi-security-sample-contacts-filter例子学习(一)http://www.aygfsteel.com/lijiajia418/archive/2006/09/01/67082.htmlBinaryBinaryFri, 01 Sep 2006 05:44:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/09/01/67082.htmlhttp://www.aygfsteel.com/lijiajia418/comments/67082.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/09/01/67082.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/67082.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/67082.html ˜q™æ˜¯ä¸€ä¸?/span> Acegi 官方的例子。它以联¾pÖMhçš„ç®¡ç†äØ“ä¾‹å­åQŒè¯´æ˜Žå¦‚何ä‹Éç”?/span> Acegi 作权限控制。这个例子包含在 acegi 的包里面。下载地址åQ?/span> http://prdownloads.sourceforge.net/acegisecurity/acegi-security-0.8.3.zip?downloadã€?/span>

联系人管理说明了下列中心�span lang="EN-US">Acegi安全控制能力:

  • Role-based security åQˆåŸºäºŽè§’色的安全åQ?/span> ――每个责ä»ÖMh都是某个角色的一员。而角色被用来限制å¯ÒŽŸäº›å®‰å…¨å¯¹è±¡çš„讉K—®ã€?/span>
  • Domain object instance security åQˆåŸŸå¯¹è±¡å®žä¾‹å®‰å…¨åQ?/span> ――合同,˜q™ä¸ª¾pȝ»Ÿé‡Œçš„主要域对象,拥有一个访问控制列表( ACL åQ‰ï¼Œç”¨æ¥æŒ‡æ˜Žè°å…è®¸è¯»ã€ç®¡ç†å’Œåˆ é™¤å¯¹è±¡ã€?/span>
  • Method invocation security åQˆæ–¹æ³•调用安全)―â€?/span> ˜q™ä¸ª ContactManager 服务层对è±?/span> 包含一些受保护的和公开的方法ã€?/span>
  • Web request security åQ?/span> Web è¯äh±‚安全åQ?/span> ――这个â€?/span> /secure â€?/span> URI 路径被ä‹Éç”?/span> Acegi 安全保护åQŒä‹É得没æœ?/span> ROLE_USER 角色的用æˆäh— æ³•访问ã€?/span> .
  • Security unaware application objects åQˆä¿æŠ¤æœªçŸ¥çš„应用对象åQ?/span> ――受保护的对象与 Acegi 之间没有明显的耦合或契¾U¦ï¼Œæ‰€ä»¥å®ƒä»¬æ²¡æœ‰å¯Ÿè§‰åˆ°å®‰å…¨æ˜¯ç”± Acegi 提供的ã€?/span> *
  • Security taglib usage åQˆå®‰å…¨æ ‡½{‘Öº“使用åQ?/span> ――所有的 JSP 使用 Acegi 安全标签库来ž®è£…安全信息ã€?/span> *
  • Fully declarative security( 完全声明式的安全 ) ――每一个安全方面特性都是在 application context 里面使用标准çš?/span> Acegi 安全对象来配¾|®çš„ã€?/span> *
  • Database-sourced security data åQˆæ”¯æŒæ•°æ®åº“来源的安全数据) ――所有的用户、角色和 ACL 信息都可以从一个兼å®?/span> JDBC 的内存数据库获得ã€?/span>
  • Integrated form-based and BASIC authentication åQˆé›†æˆåŸºäºŽè¡¨å•å’Œ BASIC 验证åQ‰â€•â€?/span> ä»ÖM½• BASIC 验证头部被检‹¹‹ä»¥åŠä½œä¸ºéªŒè¯ä‹É用。默认ä‹É用基于表单的普通交互式验证ã€?/span>
  • Remember-me services åQˆè®°ä½æˆ‘的服务)―â€?/span> Acegi 安全的插件式的â€?/span> remember-me â€?/span> ½{–略被演½Cºã€‚在ç™Õd½•表单里有一个相关的选择框与之对应ã€?/span>

联系人管理的业务功能描述åQ?/span>

1.1. 每个用户ç™Õd½•后,可以看到一个联¾pÖMh列表。例如,

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

说明åQšç”¨æˆäh²¡æœ‰æƒé™è®¿é—®çš„联系äºÞZ¿¡æ¯ï¼Œž®†ä¸ä¼šæ˜¾½Cºã€?/span>

2.2. 用户可以增加新的联系äºÞZ¿¡æ¯ã€?/span>

3.3. 如果有删除权限,用户可以看到在联¾pÖMh后面有一个â€?/span> Del ”链接。用户可以点击这个链接来删除某个联系äºÞZ¿¡æ¯ã€?/span>

4.4. 如果有管理权限,用户可以看到在联¾pÖMh后面有一个â€?/span> Admin Permission ”链接。用户可以点击这个链接来½Ž¡ç†è®‰K—®˜q™ä¸ªè”系人的权限。例如,

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

说明åQšæ¯ä¸€è¡Œè®°å½•åŒ…å«æœ‰ 3 列ã€?/span>

½W¬ä¸€åˆ—表½Cºæƒé™ï¼Œä¾‹å¦‚åQŒâ€?/span> -RW-D ”表½Cºå¯è¯…R€å¯å†™ã€å¯åˆ é™¤ã€?/span>

½W¬äºŒåˆ—也表示权限åQŒä½†å®ƒæ˜¯ä»¥ç±»ä¼?/span> unix 权限的数字表达。例如,â€?/span> [22] â€?/span> , 表示可读、可写、可删除ã€?/span>

½W¬ä¸‰åˆ—是用户名称ã€?/span>

每一行记录后面都有一个â€?/span> Del ”链接。点击这个链接,可以删除掉指定用户对˜q™ä¸ªè”ç³»äºÞZ¿¡æ¯çš„æƒé™ã€?/span>

5.5. 用户可以为某个联¾pÖMh信息æ·ÕdŠ æƒé™ã€‚ä¾‹å¦‚ï¼Œ

Add Permission

Contact:

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


Recipient:


Permission:


说明åQšæƒé™æ˜¯åŠ¨æ€æ·»åŠ çš„ã€‚ä¾‹å¦‚ï¼Œä¸Šå›¾ä¸­ç»™ç”¨æˆ· scott 增加了读联系äº?/span> John 的权限。那ä¹?/span> scott 马上ž®±å¯ä»¥çœ‹åˆ°è”¾pÖMh John 的信息了ã€?/span>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ½­´ïÏØ| ÂåÆÖÏØ| ÐËÉ½ÏØ| ÁÙÕÄÏØ| ÉîÔóÏØ| ³¤·áÏØ| ÇåºÓÏØ| ÐÂÄþÏØ| °ÍÑåÄ×¶ûÊÐ| ËÞǨÊÐ| ÖÎÏØ¡£| ¶õÍпËǰÆì| ÀË¿¨×ÓÏØ| ºÍÕþÏØ| ¿Ëʲ¿ËÌÚÆì| Í¨É½ÏØ| ¶·ÁùÊÐ| Â¹ÒØÏØ| À¼ÖÝÊÐ| Ëà±±| Æ½É½ÏØ| ºÓ¼äÊÐ| ×ÏÔÆ| µÀÕæ| ±¨¼Û| ºÏ´¨ÊÐ| ξÊÏÏØ| ÖñÏªÏØ| ÔúÂ³ÌØÆì| ³Ç²½| µÂÇÕÏØ| ½õÖÝÊÐ| ¿µÆ½ÏØ| ÊèÀÕÏØ| »Æ¸ÔÊÐ| ÑâÉ½ÏØ| ÒÁ´ºÊÐ| ¹ÌÕòÏØ| ãòÏªÏØ| ͬÈÊÏØ| °²Í¼ÏØ|