锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品无码久久久久秋霞 ,亚洲精品色婷婷在线影院,亚洲人成电影在线观看网http://m.tkk7.com/mkchen/category/18750.html鐢ㄥ紑鏀劇殑鑴戝瓙鍘婚棷鑽?鐢ㄥ紑闃旂殑瑙嗛噹鍘繪嫾鎼?鐢ㄥ鉤鍜岀殑韜績鍘葷(緇?鐢ㄧ編濂界殑鐞嗘兂鍘昏拷姹?zh-cnWed, 28 Feb 2007 07:48:02 GMTWed, 28 Feb 2007 07:48:02 GMT60[杞琞Acegi綆浠?/title><link>http://m.tkk7.com/mkchen/archive/2006/12/27/90397.html</link><dc:creator>嫻鋒?/dc:creator><author>嫻鋒?/author><pubDate>Wed, 27 Dec 2006 15:20:00 GMT</pubDate><guid>http://m.tkk7.com/mkchen/archive/2006/12/27/90397.html</guid><wfw:comment>http://m.tkk7.com/mkchen/comments/90397.html</wfw:comment><comments>http://m.tkk7.com/mkchen/archive/2006/12/27/90397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/mkchen/comments/commentRss/90397.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/mkchen/services/trackbacks/90397.html</trackback:ping><description><![CDATA[ <a >matrixeditor</a> 鍙戣〃浜?2005-07-28 11:06:41<br />浣滆?Matrixeditor聽聽聽聽 鏉ユ簮:BEA dev2dev<br />璇勮鏁?4 鐐瑰嚮鏁?6,815聽聽聽聽 鎶曠エ鎬誨緱鍒?8 鎶曠エ鎬諱漢嬈?3<br />鍏抽敭瀛? <!-- end of div title --><div id="iimkgwa" class="summary"><div id="cyweiam" class="left"></div><div id="aswoaki" class="center"><h4>鎽樿:</h4>Acegi瀹夊叏緋葷粺錛屾槸涓涓敤浜嶴pring Framework鐨勫畨鍏ㄦ鏋訛紝鑳藉鍜岀洰鍓嶆祦琛岀殑Web瀹瑰櫒鏃犵紳闆嗘垚銆傚畠浣跨敤浜哠pring鐨勬柟寮忔彁渚涗簡瀹夊叏鍜岃璇佸畨鍏ㄦ湇鍔★紝鍖呮嫭浣跨敤Bean Context錛屾嫤鎴櫒鍜岄潰鍚戞帴鍙g殑緙栫▼鏂瑰紡銆傚洜姝わ紝Acegi瀹夊叏緋葷粺鑳藉杞繪澗鍦伴傜敤浜庡鏉傜殑瀹夊叏闇姹傘?</div><div id="gywiukc" class="right"><div id="iswgioe" class="help"><h4>宸ュ叿綆?/h4><a >鏈珯鏀惰棌</a><br /><a onclick="javascript:location. >緹庡懗涔︾</a><br /><a >鎶曠エ璇勫垎</a><br /><a >鍙戣〃璇勮</a><br /><a title="鐐瑰嚮鍚庣洿鎺ョ矘璐村嵆鍙? onclick="copyLink();" >澶嶅埗閾炬帴</a><br /></div></div></div><!-- end of summary line --><div id="akoqkcs" class="overflow" id="text">聽聽聽聽聽聽聽聽聽聽 Acegi瀹夊叏緋葷粺錛屾槸涓涓敤浜嶴pring Framework鐨勫畨鍏ㄦ鏋訛紝鑳藉鍜岀洰鍓嶆祦琛岀殑Web瀹瑰櫒鏃犵紳闆嗘垚銆傚畠浣跨敤浜哠pring鐨勬柟寮忔彁渚涗簡瀹夊叏鍜岃璇佸畨鍏ㄦ湇鍔★紝鍖呮嫭浣跨敤Bean Context錛屾嫤鎴櫒鍜岄潰鍚戞帴鍙g殑緙栫▼鏂瑰紡銆傚洜姝わ紝Acegi瀹夊叏緋葷粺鑳藉杞繪澗鍦伴傜敤浜庡鏉傜殑瀹夊叏闇姹傘?br />聽聽聽聽聽聽 瀹夊叏娑夊強鍒頒袱涓笉鍚岀殑姒傚康錛岃璇佸拰鎺堟潈銆傚墠鑰呮槸鍏充簬紜鐢ㄦ埛鏄惁紜疄鏄粬浠墍瀹gО鐨勮韓浠姐傛巿鏉冨垯鏄叧浜庣‘璁ょ敤鎴鋒槸鍚︽湁鍏佽鎵ц涓涓壒瀹氱殑鎿嶄綔銆?br />聽聽聽聽聽聽 鍦ˋcegi瀹夊叏緋葷粺涓紝闇瑕佽璁よ瘉鐨勭敤鎴鳳紝緋葷粺鎴栦唬鐞嗙О涓?Principal"銆侫cegi瀹夊叏緋葷粺鍜屽叾浠栫殑瀹夊叏緋葷粺涓嶅悓錛屽畠騫舵病鏈夎鑹插拰鐢ㄦ埛緇勭殑姒傚康銆?br />Acegi緋葷粺璁捐<br />聽聽鍏抽敭緇勪歡<br />聽聽聽聽聽聽Acegi瀹夊叏緋葷粺鍖呭惈浠ヤ笅涓冧釜鍏抽敭鐨勫姛鑳界粍浠訛細<br />聽聽聽聽聽聽聽聽1 Authentication瀵硅薄錛屽寘鍚簡Principal錛孋redential鍜孭rincipal鐨勬巿鏉冧俊鎭傚悓鏃惰繕鍙互鍖呭惈鍏充簬鍙戣搗璁よ瘉璇鋒眰鐨勫鎴風殑鍏朵粬淇℃伅錛屽IP鍦板潃銆?br />聽聽聽聽聽聽聽聽2 ContextHolder瀵硅薄錛屼嬌鐢═hreadLocal鍌ㄥ瓨Authentication瀵硅薄鐨勫湴鏂廣?br />聽聽聽聽聽聽聽聽3 AuthenticationManager錛岀敤浜庤璇丆ontextHolder涓殑Authentication瀵硅薄銆?br />聽聽聽聽聽聽聽聽4 AccessDecissionManager錛岀敤浜庢巿鏉冧竴涓壒瀹氱殑鎿嶄綔銆?br />聽聽聽聽聽聽聽聽5 RunAsManager錛屽綋鎵ц鐗瑰畾鐨勬搷浣滄椂錛岀敤浜庨夋嫨鎬у湴鏇挎崲Authentication瀵硅薄銆?br />聽聽聽聽聽聽聽聽6 Secure Object鎷︽埅鍣紝鐢ㄤ簬鍗忚皟AuthenticationManager錛孉ccessDecissionManager錛孯unAsManager鍜岀壒瀹氭搷浣滅殑鎵ц銆?br />聽聽聽聽聽聽聽聽7 ObjectDefinitionSource錛屽寘鍚簡鐗瑰畾鎿嶄綔鐨勬巿鏉冨畾涔夈?br />聽聽聽聽聽聽榪欎竷涓叧閿殑鍔熻兘緇勪歡鐨勫叧緋誨涓嬪浘鎵紺猴紙鍥句腑鐏拌壊閮ㄥ垎鏄叧閿粍浠訛級錛?br /><br /><br /><b>瀹夊叏綆$悊瀵硅薄</b><br />聽聽聽聽聽聽 Acegi瀹夊叏緋葷粺鐩墠鏀寔涓ょ被瀹夊叏綆$悊瀵硅薄銆?br />聽聽聽聽聽聽 絎竴綾葷殑瀹夊叏綆$悊瀵硅薄綆$悊AOP Alliance鐨凪ethodInvocation錛屽紑鍙戜漢鍛樺彲浠ョ敤瀹冩潵淇濇姢Spring瀹瑰櫒涓殑涓氬姟瀵硅薄銆備負浜嗕嬌Spring綆$悊鐨凚ean鍙互浣滀負MethodInvocation鏉ヤ嬌鐢紝Bean鍙互閫氳繃ProxyFactoryBean鍜孊eanNameAutoProxyCreator鏉ョ鐞嗭紝灝卞儚鍦⊿pring鐨勪簨鍔$鐞嗕竴鏍蜂嬌鐢ㄣ?br />聽聽聽聽聽聽 絎簩綾繪槸FilterInvocation銆傚畠鐢ㄨ繃婊ゅ櫒錛團ilter錛夋潵鍒涘緩錛屽茍綆鍗曞湴鍖呰浜咹TTP鐨凷ervletRequest錛孲ervletResponse鍜孎ilterChain銆侳ilterInvocation鍙互鐢ㄦ潵淇濇姢HTTP璧勬簮銆傞氬父錛屽紑鍙戜漢鍛樺茍涓嶉渶瑕佷簡瑙e畠鐨勫伐浣滄満鍒訛紝鍥犱負浠栦滑鍙渶瑕佸皢Filter鍔犲叆web.xml錛孉cegi瀹夊叏緋葷粺灝卞彲浠ュ伐浣滀簡銆?br /><br /><b>瀹夊叏閰嶇疆鍙傛暟</b><br />聽聽聽聽聽聽 姣忎釜瀹夊叏綆$悊瀵硅薄閮藉彲浠ユ弿榪版暟閲忎笉闄愮殑鍚勭瀹夊叏璁よ瘉璇鋒眰銆備緥濡傦紝MethodInvocation瀵硅薄鍙互鎻忚堪甯︽湁浠繪剰鍙傛暟鐨勪換鎰忔柟娉曠殑璋冪敤錛岃孎ilterInvocation鍙互鎻忚堪浠繪剰鐨凥TTP URL銆?br />聽聽聽聽聽聽 Acegi瀹夊叏緋葷粺闇瑕佽褰曞簲鐢ㄤ簬姣忎釜璁よ瘉璇鋒眰鐨勫畨鍏ㄩ厤緗弬鏁般備緥濡傦紝瀵逛簬BankManager.getBalance錛坕nt accountNumber錛夋柟娉曞拰BankManager.approveLoan錛坕nt applicationNumber錛夋柟娉曪紝瀹冧滑闇瑕佺殑璁よ瘉璇鋒眰鐨勫畨鍏ㄩ厤緗緢涓嶇浉鍚屻?br />聽聽聽聽聽聽 涓轟簡淇濆瓨涓嶅悓鐨勮璇佽姹傜殑瀹夊叏閰嶇疆錛岄渶瑕佷嬌鐢ㄩ厤緗弬鏁般備粠瀹炵幇鐨勮瑙掓潵鐪嬶紝閰嶇疆鍙傛暟浣跨敤ConfigAttribute鎺ュ彛鏉ヨ〃紺恒侫cegi瀹夊叏緋葷粺鎻愪緵浜咰onfigAttribute鎺ュ彛鐨勪竴涓疄鐜幫紝SecurityConfig錛屽畠鎶婇厤緗弬鏁頒繚瀛樹負涓涓瓧絎︿覆銆?br />聽聽聽聽聽聽 ConfigAttributeDefinition綾繪槸ConfigAttribute瀵硅薄鐨勪竴涓畝鍗曠殑瀹瑰櫒錛屽畠淇濆瓨浜嗗拰鐗瑰畾璇鋒眰鐩稿叧鐨凜onfigAttribute鐨勯泦鍚堛?br />聽聽聽聽聽聽 褰撳畨鍏ㄦ嫤鎴櫒鏀跺埌涓涓畨鍏ㄨ璇佽姹傛椂錛岄渶瑕佸喅瀹氬簲鐢ㄥ摢涓涓厤緗弬鏁般傛崲鍙ヨ瘽璇達紝瀹冮渶瑕佹壘鍑哄簲鐢ㄤ簬榪欎釜璇鋒眰鐨凜onfigAttributeDefinition瀵硅薄銆傝繖涓煡鎵劇殑榪囩▼鏄敱ObjectDefinitionSource鎺ュ彛鏉ュ鐞嗙殑銆傝繖涓帴鍙g殑涓昏鏂規硶鏄痯ublic ConfigAttributeDefinition getAttributes(Object object)錛屽叾涓璒bject鍙傛暟鏄竴涓畨鍏ㄧ鐞嗗璞°傚洜涓哄畨鍏ㄧ鐞嗗璞″寘鍚湁璁よ瘉璇鋒眰鐨勮緇嗕俊鎭紝鎵浠bjectDefinitionSource鎺ュ彛鐨勫疄鐜扮被鍙互浠庝腑鑾峰緱鎵闇鐨勮緇嗕俊鎭紝浠ユ煡鎵劇浉鍏崇殑ConfigAttributeDefiniton瀵硅薄銆?br /><br /><br /><b>Acegi濡備綍宸ヤ綔</b><br />聽聽聽聽聽聽 涓轟簡璇存槑Acegi瀹夊叏緋葷粺濡備綍宸ヤ綔錛屾垜浠鎯充竴涓嬌鐢ˋcegi鐨勪緥瀛愩傞氬父錛屼竴涓畨鍏ㄧ郴緇熼渶瑕佸彂鎸ヤ綔鐢紝瀹冨繀欏誨畬鎴愪互涓嬬殑宸ヤ綔錛?br />聽聽聽聽聽聽1 棣栧厛錛岀郴緇熶粠瀹㈡埛绔姹備腑鑾峰緱Principal鍜孋redential錛?br />聽聽聽聽聽聽2 鐒跺悗緋葷粺璁よ瘉Principal鍜孋redential淇℃伅錛?br />聽聽聽聽聽聽3 濡傛灉璁よ瘉閫氳繃錛岀郴緇熷彇鍑篜rincipal鐨勬巿鏉冧俊鎭紱<br />聽聽聽聽聽聽4 鎺ヤ笅鏉ワ紝瀹㈡埛绔彂璧鋒搷浣滆姹傦紱<br />聽聽聽聽聽聽5 緋葷粺鏍規嵁棰勫厛閰嶇疆鐨勫弬鏁版鏌rincipal瀵逛簬璇ユ搷浣滅殑鎺堟潈錛?br />聽聽聽聽聽聽6 濡傛灉鎺堟潈媯鏌ラ氳繃鍒欐墽琛屾搷浣滐紝鍚﹀垯鎷掔粷銆?br />聽聽聽聽聽聽閭d箞錛孉cegi瀹夊叏緋葷粺鏄浣曞畬鎴愯繖浜涘伐浣滅殑鍛紵棣栧厛錛屾垜浠潵鐪嬬湅Acegi瀹夊叏緋葷粺鐨勮璇佸拰鎺堟潈鐨勭浉鍏崇被錛?<br />聽聽聽聽聽聽瀹夊叏鎷︽埅鍣ㄧ殑鎶借薄鍩虹被錛屽畠鍖呭惈鏈変袱涓鐞嗙被錛孉uthenticationManager鍜孉ccessDecisionManager銆侫uthenticationManager鐢ㄤ簬璁よ瘉ContextHolder涓殑Authentication瀵硅薄錛堝寘鍚簡Principal錛孋redential鍜孭rincipal鐨勬巿鏉冧俊鎭級錛汚ccessDecissionManager鍒欑敤浜庢巿鏉冧竴涓壒瀹氱殑鎿嶄綔銆?br /><br />聽聽聽聽聽聽涓嬮潰鏉ョ湅涓涓狹ethodSecurityInterceptor鐨勪緥瀛愶細<br /><pre class="overflow">聽聽聽聽聽聽<bean id="bankManagerSecurity" <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 class="net.sf.acegisecurity.intercept.method.MethodSecurityInterceptor"><br />聽聽聽聽聽聽聽聽聽聽聽聽 <property name="validateConfigAttributes"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<value>true</value><br />聽聽聽聽聽聽聽聽聽聽聽聽</property><br />聽聽聽聽聽聽聽聽聽聽聽聽<property name="authenticationManager"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <ref bean="authenticationManager"/><br />聽聽聽聽聽聽聽聽聽聽聽聽</property><br />聽聽聽聽聽聽聽聽聽聽聽聽<property name="accessDecisionManager"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<ref bean="accessDecisionManager"/><br />聽聽聽聽聽聽聽聽聽聽聽聽</property><br />聽聽聽聽聽聽聽聽聽聽聽聽<property name="objectDefinitionSource"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<value><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 net.sf.acegisecurity.context.BankManager.delete*=<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ROLE_SUPERVISOR,RUN_AS_SERVER<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 net.sf.acegisecurity.context.BankManager.getBalance=<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ROLE_TELLER,ROLE_SUPERVISOR,BANKSECURITY_CUSTOMER,RUN_<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</value><br />聽聽聽聽聽聽聽聽聽聽聽聽</property><br />聽聽聽聽聽聽</bean> </pre><br />聽聽聽聽聽聽涓婇潰鐨勯厤緗枃浠朵腑錛孧ethodSecurityInterceptor鏄疉bstractSecurityInterceptor鐨勪竴涓疄鐜扮被銆傚畠鍖呭惈浜嗕袱涓鐞嗗櫒錛宎uthenticationManager鍜宎ccessDecisionManager銆傝繖涓よ呯殑閰嶇疆濡備笅錛?br />聽聽聽聽聽聽<pre class="overflow"><bean id="authenticationDao" class="net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <property name="dataSource"><ref bean="dataSource"/></property><br />聽聽聽聽聽聽</bean><br />聽聽聽聽聽聽<bean id="daoAuthenticationProvider" <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 class="net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <property name="authenticationDao"><ref bean="authenticationDao"/></property><br />聽聽聽聽聽聽</bean><br />聽聽聽聽聽聽<bean id="authenticationManager" class="net.sf.acegisecurity.providers.ProviderManager"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <property name="providers"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<list><ref bean="daoAuthenticationProvider"/></list><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </property><br />聽聽聽聽聽聽</bean><br />聽聽聽聽聽聽<bean id="roleVoter" class="net.sf.acegisecurity.vote.RoleVoter"/><br />聽聽聽聽聽聽<bean id="accessDecisionManager" class="net.sf.acegisecurity.vote.AffirmativeBased"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <property name="allowIfAllAbstainDecisions"><value>false</value></property><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <property name="decisionVoters"><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<list><ref bean="roleVoter"/></list><br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </property><br />聽聽聽聽聽聽</bean></pre><br /><br />聽聽聽聽聽聽 鍑嗗宸ヤ綔鍋氬ソ浜嗭紝鐜板湪鎴戜滑鏉ョ湅鐪婣cegi瀹夊叏緋葷粺鏄浣曞疄鐜拌璇佸拰鎺堟潈鏈哄埗鐨勩備互浣跨敤HTTP BASIC璁よ瘉鐨勫簲鐢ㄤ負渚嬪瓙錛屽畠鍖呮嫭涓嬮潰鐨勬楠わ細<br />聽聽聽聽聽聽 1. 鐢ㄦ埛鐧誨綍緋葷粺錛孉cegi浠巃cegisecurity.ui瀛愮郴緇熺殑瀹夊叏鎷︽埅鍣紙濡侭asicProcessingFilter錛変腑寰楀埌鐢ㄦ埛鐨勭櫥褰曚俊鎭紙鍖呮嫭Principal鍜孋redential錛夊茍鏀懼叆Authentication瀵硅薄錛屽茍淇濆瓨鍦–ontextHolder瀵硅薄涓紱<br />聽聽聽聽聽聽 2. 瀹夊叏鎷︽埅鍣ㄥ皢Authentication瀵硅薄浜ょ粰AuthenticationManager榪涜韜喚璁よ瘉錛屽鏋滆璇侀氳繃錛岃繑鍥炲甫鏈塒rincipal鎺堟潈淇℃伅鐨凙uthentication瀵硅薄銆傛鏃禖ontextHolder瀵硅薄鐨凙uthentication瀵硅薄宸叉嫢鏈塒rincipal鐨勮緇嗕俊鎭紱<br />聽聽聽聽聽聽 3. 鐢ㄦ埛鐧誨綍鎴愬姛鍚庯紝緇х畫榪涜涓氬姟鎿嶄綔錛?br />聽聽聽聽聽聽 4. 瀹夊叏鎷︽埅鍣紙bankManagerSecurity錛夋敹鍒板鎴風鎿嶄綔璇鋒眰鍚庯紝灝嗘搷浣滆姹傜殑鏁版嵁鍖呰鎴愬畨鍏ㄧ鐞嗗璞★紙FilterInvocation鎴朚ethodInvocation瀵硅薄錛夛紱<br />聽聽聽聽聽聽 5. 鐒跺悗錛屼粠閰嶇疆鏂囦歡錛圤bjectDefinitionSource錛変腑璇誨嚭鐩稿叧鐨勫畨鍏ㄩ厤緗弬鏁癈onfigAttributeDefinition錛?br />聽聽聽聽聽聽 6. 鎺ョ潃錛屽畨鍏ㄦ嫤鎴櫒鍙栧嚭ContextHolder涓殑Authentication瀵硅薄錛屾妸瀹冧紶閫掔粰AuthenticationManager榪涜韜喚璁よ瘉錛屽茍鐢ㄨ繑鍥炲兼洿鏂癈ontextHolder鐨凙uthentication瀵硅薄錛?br />聽聽聽聽聽聽 7. 灝咥uthentication瀵硅薄錛孋onfigAttributeDefinition瀵硅薄鍜屽畨鍏ㄧ鐞嗗璞★紙secure Object錛変氦緇橝ccessDecisionManager錛屾鏌rincipal鐨勬搷浣滄巿鏉冿紱<br />聽聽聽聽聽聽 8. 濡傛灉鎺堟潈媯鏌ラ氳繃鍒欐墽琛屽鎴風璇鋒眰鐨勬搷浣滐紝鍚﹀垯鎷掔粷錛?br /><br /><b>AccessDecisionVoter</b><br />聽聽聽聽聽聽 娉ㄦ剰涓婅妭鐨刟ccessDecisionManager鏄竴涓狝ffirmativeBased綾伙紝瀹冨浜庣敤鎴鋒巿鏉冪殑鎶曠エ絳栫暐鏄紝鍙閫氳繃鍏朵腑鐨勪竴涓巿鏉冩姇紲ㄦ鏌ワ紝鍗沖彲閫氳繃錛涘畠鐨刟llowIfAllAbstainDecisions灞炴у兼槸false錛屾剰鎬濇槸濡傛灉鎵鏈夌殑鎺堟潈鎶曠エ鏄兘鏄純鏉冿紝鍒欓氫笉榪囨巿鏉冩鏌ャ?br />聽聽聽聽聽聽 Acegi瀹夊叏緋葷粺鍖呮嫭浜嗗嚑涓熀浜庢姇紲ㄧ瓥鐣ョ殑AccessDecisionManager錛屼笂鑺傜殑RoleVoter灝辨槸鍏朵腑鐨勪竴涓姇紲ㄧ瓥鐣ュ疄鐜幫紝瀹冩槸AccessDecisionVoter鐨勪竴涓瓙綾匯侫ccessDecisionVoter鐨勫叿浣撳疄鐜扮被閫氳繃鎶曠エ鏉ヨ繘琛屾巿鏉冨喅絳栵紝AccessDecisionManager鍒欐牴鎹姇紲ㄧ粨鏋滄潵鍐沖畾鏄氳繃鎺堟潈媯鏌ワ紝榪樻槸鎶涘嚭AccessDeniedException渚嬪銆?br />聽聽聽聽聽聽 AccessDecisionVoter鎺ュ彛鍏辨湁涓変釜鏂規硶錛?br />public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config);<br />public boolean supports(ConfigAttribute attribute);<br />public boolean supports(Class clazz);<br />聽聽聽聽聽聽 鍏朵腑鐨剉ote鏂規硶榪斿洖int榪斿洖鍊鹼紝瀹冧滑鏄疉ccessDecisionVoter鐨勪笁涓潤鎬佹垚鍛樺睘鎬э細ACCESS_ABSTAIN,錛孉CCESS_DENIED鍜孉CCESS_GRANTED錛屽畠浠垎鍒槸寮冩潈錛屽惁鍐沖拰璧炴垚銆?br />聽聽聽聽聽聽 Acegi瀹夊叏緋葷粺涓紝浣跨敤鎶曠エ絳栫暐鐨凙ccessDecisionManager鍏辨湁涓変釜鍏蜂綋瀹炵幇綾伙細AffirmativeBased銆丆onsensusBased鍜孶nanimousBased銆傚畠浠殑鎶曠エ絳栫暐鏄紝AffirmativeBased綾誨彧闇鏈変竴涓姇紲ㄨ禐鎴愬嵆鍙氳繃錛汣onsensusBased綾婚渶瑕佸ぇ澶氭暟鎶曠エ璧炴垚鍗沖彲閫氳繃錛涜孶nanimousBased綾婚渶瑕佹墍鏈夌殑鎶曠エ璧炴垚鎵嶈兘閫氳繃銆?br />聽聽聽聽聽聽 RoleVoter綾繪槸涓涓狝cegi瀹夊叏緋葷粺AccessDecisionVoter鎺ュ彛鐨勫疄鐜般傚鏋淐onfigAttribute浠OLE_寮澶達紝RoleVoter鍒欒繘琛屾姇紲ㄣ傚鏋淕rantedAuthority鐨刧etAutority鏂規硶鐨凷tring榪斿洖鍊煎尮閰嶄竴涓垨澶氫釜浠OLE_寮澶寸殑ConfigAttribute錛屽垯鎶曠エ閫氳繃錛屽惁鍒欎笉閫氳繃銆傚鏋滄病鏈変互ROLE_寮澶寸殑ConfigAttribute錛孯oleVoter鍒欏純鏉冦?br /><br /><b>瀹夊叏鎷︽埅鍣?/b><br />聽聽鎷︽埅鍣ㄥ浣曞伐浣?br />聽聽MethodInvocation鎷︽埅鍣?br />聽聽FilterInvocation鎷︽埅鍣?br />璁よ瘉<br />聽聽璁よ瘉璇鋒眰<br />聽聽璁よ瘉綆$悊鍣?br />聽聽Authentication Provider<br />鎺堟潈<br />聽聽Access Decision Manager<br />聽聽Voting Decision Manager<br />聽聽鎺堟潈綆$悊鎺ㄨ崘<br />ContextHolder鐨勭敤鎴鋒帴鍙?br />聽聽鐢ㄦ埛鎺ュ彛鐩爣<br />聽聽HTTP浼氳瘽璁よ瘉<br />聽聽HTTP Basic璁よ瘉<br /><br />1銆丩og4j鐨勬蹇?br />聽聽 Log4j涓湁涓変釜涓昏鐨勭粍浠訛紝瀹冧滑鍒嗗埆鏄疞ogger銆丄ppender鍜孡ayout錛孡og4j 鍏佽寮鍙戜漢鍛樺畾涔夊涓狶ogger錛屾瘡涓狶ogger鎷ユ湁鑷繁鐨勫悕瀛楋紝Logger涔嬮棿閫氳繃鍚嶅瓧鏉ヨ〃鏄庨毝灞炲叧緋匯傛湁涓涓狶ogger縐頒負Root錛屽畠姘歌繙 瀛樺湪錛屼笖涓嶈兘閫氳繃鍚嶅瓧媯绱㈡垨寮曠敤錛屽彲浠ラ氳繃Logger.getRootLogger()鏂規硶鑾峰緱錛屽叾瀹僉ogger閫氳繃 Logger.getLogger(String name)鏂規硶銆?br />聽聽 Appender鍒欐槸鐢ㄦ潵鎸囨槑灝嗘墍鏈夌殑log淇℃伅瀛樻斁鍒頒粈涔堝湴鏂癸紝Log4j涓敮鎸佸縐峚ppender錛屽 console銆乫iles銆丟UI components銆丯T Event Loggers絳夛紝涓涓狶ogger鍙互鎷ユ湁澶氫釜Appender錛屼篃灝辨槸浣犳棦鍙互灝哃og淇℃伅杈撳嚭鍒板睆騫曪紝鍚屾椂瀛樺偍鍒頒竴涓枃浠朵腑銆?br />聽聽 Layout鐨勪綔鐢ㄦ槸鎺у埗Log淇℃伅鐨勮緭鍑烘柟寮忥紝涔熷氨鏄牸寮忓寲杈撳嚭鐨勪俊鎭?br />聽聽 Log4j涓皢瑕佽緭鍑虹殑Log淇℃伅瀹氫箟浜?縐嶇駭鍒紝渚濇涓篋EBUG銆両NFO銆乄ARN銆丒RROR鍜孎ATAL錛屽綋杈撳嚭鏃訛紝鍙湁綰у埆楂樿繃閰嶇疆涓瀹氱殑 綰у埆鐨勪俊鎭墠鑳界湡姝g殑杈撳嚭錛岃繖鏍峰氨寰堟柟渚跨殑鏉ラ厤緗笉鍚屾儏鍐典笅瑕佽緭鍑虹殑鍐呭錛岃屼笉闇瑕佹洿鏀逛唬鐮侊紝榪欑偣瀹炲湪鏄柟渚垮晩銆?br /><br />2銆丩og4j鐨勯厤緗枃浠?br />聽聽铏界劧鍙互涓嶇敤閰嶇疆鏂囦歡錛岃屽湪紼嬪簭涓疄鐜伴厤緗紝浣嗚繖縐嶆柟娉曞湪濡備粖鐨勭郴緇熷紑鍙戜腑鏄劇劧鏄笉鍙彇鐨勶紝鑳介噰鐢ㄩ厤緗枃浠剁殑鍦版柟涓瀹氫竴瀹氳鐢ㄩ厤緗枃浠躲侺og4j鏀寔涓?縐嶆牸寮忕殑閰嶇疆鏂囦歡錛歑ML鏍煎紡鍜孞ava鐨刾roperty鏍煎紡錛屾湰浜烘洿鍠滄鍚庤咃紝棣栧厛鐪嬩竴涓畝鍗曠殑渚嬪瓙鍚э紝濡備笅錛?br /><br /><pre class="overflow"> log4j.rootLogger=debug, stdout, R<br />聽聽log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />聽聽log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br /><br />聽聽# Pattern to output the caller's file name and line number.<br />聽聽log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n<br /><br />聽聽log4j.appender.R=org.apache.log4j.RollingFileAppender<br />聽聽log4j.appender.R.File=example.log<br />聽聽log4j.appender.R.MaxFileSize=100KB<br /><br />聽聽# Keep one backup file<br />聽聽log4j.appender.R.MaxBackupIndex=1<br /><br />聽聽log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />聽聽log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n</pre>聽聽聽聽聽聽聽聽 <br /><br />聽聽棣栧厛錛屾槸璁劇疆root錛屾牸寮忎負 log4j.rootLogger=[level],appenderName, ...錛屽叾涓璴evel灝辨槸璁劇疆闇瑕佽緭鍑轟俊鎭殑綰у埆錛屽悗闈㈡槸appender鐨勮緭鍑虹殑鐩殑鍦幫紝appenderName灝辨槸鎸囧畾鏃ュ織淇℃伅杈撳嚭鍒板摢涓湴鏂廣傛偍鍙互鍚屾椂鎸囧畾澶氫釜杈撳嚭鐩殑鍦般傞厤緗棩蹇椾俊鎭緭鍑虹洰鐨勫湴Appender錛屽叾璇硶涓?br />聽聽log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />聽聽log4j.appender.appenderName.option1 = value1<br />聽聽...<br />聽聽log4j.appender.appenderName.option = valueN<br />Log4j鎻愪緵鐨刟ppender鏈変互涓嬪嚑縐嶏細<br />聽聽org.apache.log4j.ConsoleAppender錛堟帶鍒跺彴錛?br />聽聽org.apache.log4j.FileAppender錛堟枃浠訛級<br />聽聽org.apache.log4j.DailyRollingFileAppender錛堟瘡澶╀駭鐢熶竴涓棩蹇楁枃浠訛級<br />聽聽org.apache.log4j.RollingFileAppender錛堟枃浠跺ぇ灝忓埌杈炬寚瀹氬昂瀵哥殑鏃跺欎駭鐢熸柊鏂囦歡錛?br />聽聽org.apache.log4j.WriterAppender錛堝皢鏃ュ織淇℃伅浠ユ祦鏍煎紡鍙戦佸埌浠繪剰鎸囧畾鐨勫湴鏂癸級<br />閰嶇疆鏃ュ織淇℃伅鐨勬牸寮忥紙甯冨眬錛夛紝鍏惰娉曚負錛?br />聽聽log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />聽聽log4j.appender.appenderName.layout.option1 = value1<br />聽聽....<br />聽聽log4j.appender.appenderName.layout.option = valueN<br />Log4j鎻愪緵鐨刲ayout鏈変互涓嬪嚑縐嶏細<br />聽聽org.apache.log4j.HTMLLayout錛堜互HTML琛ㄦ牸褰㈠紡甯冨眬錛夛紝<br />聽聽org.apache.log4j.PatternLayout錛堝彲浠ョ伒媧誨湴鎸囧畾甯冨眬妯″紡錛夛紝<br />聽聽org.apache.log4j.SimpleLayout錛堝寘鍚棩蹇椾俊鎭殑綰у埆鍜屼俊鎭瓧絎︿覆錛夛紝<br />聽聽org.apache.log4j.TTCCLayout錛堝寘鍚棩蹇椾駭鐢熺殑鏃墮棿銆佺嚎紼嬨佺被鍒瓑絳変俊鎭級 <br /><br />3銆丩og4j鍦ㄧ▼搴忎腑鐨勪嬌鐢?br />聽聽瑕佸湪鑷繁鐨勭被涓嬌鐢↙og4j錛岄鍏堝0鏄庝竴涓潤鎬佸彉閲廘ogger logger=Logger.getLog("classname")錛涘湪浣跨敤涔嬪墠錛岀敤PropertyConfigurator.configure ("閰嶇疆鏂囦歡")閰嶇疆涓涓嬶紝鐜板湪灝卞彲浠ヤ嬌鐢ㄤ簡錛岀敤娉曞涓嬶細logger.debug("debug message")鎴栬卨ogger.info("info message")錛岀湅涓嬮潰涓涓皬渚嬪瓙錛?br /><br /><pre class="overflow"> import com.foo.Bar;<br />聽聽import org.apache.log4j.Logger;<br />聽聽import org.apache.log4j.PropertyConfigurator;<br />聽聽public class MyApp {<br />聽聽聽聽static Logger logger = Logger.getLogger(MyApp.class.getName());<br />聽聽聽聽public static void main(String[] args) {<br />聽聽聽聽聽聽// BasicConfigurator replaced with PropertyConfigurator.<br />聽聽聽聽聽聽PropertyConfigurator.configure(args[0]);<br />聽聽聽聽聽聽logger.info("Entering application.");<br />聽聽聽聽聽聽Bar bar = new Bar();<br />聽聽聽聽聽聽bar.doIt();<br />聽聽聽聽聽聽logger.info("Exiting application.");<br />聽聽聽聽}<br />聽聽}</pre><br /><br /><br />[綆浠媇<br /><br />瀵逛簬涓涓吀鍨嬬殑Web搴旂敤錛屽畬鍠勭殑璁よ瘉鍜屾巿鏉冩満鍒舵槸蹇呬笉鍙皯鐨勶紝鍦⊿pringFramework涓紝Juergen Hoeller鎻愪緵鐨勮寖渚婮PetStore緇欎簡涓浜涜繖鏂歸潰鐨勪粙緇嶏紝浣嗚繕榪滆繙涓嶅錛孉cegi鏄竴涓笓闂ㄤ負SpringFramework鎻愪緵瀹夊叏鏈哄埗鐨?欏圭洰錛屽叏縐頒負Acegi Security System for Spring錛屽綋鍓嶇増鏈負0.5.1錛屽氨鍏剁洰鍓嶆彁渚涚殑鍔熻兘錛屽簲璇ュ彲浠ユ弧瓚崇粷澶у鏁板簲鐢ㄧ殑闇姹傘?br /><br />鏈枃鐨勪富瑕佺洰鐨勬槸甯屾湜鑳藉璇存槑濡備綍鍦ㄥ熀浜嶴pring鏋勬灦鐨刉eb搴旂敤涓嬌鐢ˋcegi錛岃屼笉鏄緇嗕粙緇嶅叾涓殑姣忎釜鎺ュ彛銆佹瘡涓被銆傛敞鎰忥紝鍗充嬌瀵瑰凡緇忓瓨鍦ㄧ殑Spring搴旂敤錛岄氳繃涓嬮潰浠嬬粛鐨勬楠わ紝涔熷彲浠ラ┈涓婁韓鍙楀埌Acegi鎻愪緵鐨勮璇佸拰鎺堟潈銆?br /><br />[鍩虹宸ヤ綔]<br />鍦ㄤ綘鐨刉eb搴旂敤鐨刲ib涓坊鍔燗cegi涓嬭澆鍖呬腑鐨刟cegi-security.jar<br /><br />[web.xml]<br />瀹炵幇璁よ瘉鍜屾巿鏉冪殑鏈甯哥敤鐨勬柟娉曟槸閫氳繃filter錛孉cegi浜︽槸濡傛錛岄氬父Acegi闇瑕佸湪web.xml娣誨姞浠ヤ笅5涓猣ilter:<br /><br /><pre class="overflow"><filter><br />聽聽<filter-name>Acegi Channel Processing Filter</filter-name><br />聽聽<filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class><br />聽聽<init-param><br />聽聽聽聽<param-name>targetClass</param-name><br />聽聽聽聽<param-value>net.sf.acegisecurity.securechannel.ChannelProcessingFilter</param-value><br />聽聽</init-param><br /></filter><br /><filter><br />聽聽<filter-name>Acegi Authentication Processing Filter</filter-name><br />聽聽<filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class><br />聽聽<init-param><br />聽聽聽聽<param-name>targetClass</param-name><br />聽聽聽聽<param-value>net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter</param-value><br />聽聽</init-param><br /></filter><br /><filter><br />聽聽<filter-name>Acegi HTTP BASIC Authorization Filter</filter-name><br />聽聽<filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class><br />聽聽<init-param><br />聽聽聽聽<param-name>targetClass</param-name><br />聽聽聽聽<param-value>net.sf.acegisecurity.ui.basicauth.BasicProcessingFilter</param-value><br />聽聽</init-param><br /></filter><br /><filter><br />聽聽<filter-name>Acegi Security System for Spring Auto Integration Filter</filter-name><br />聽聽<filter-class>net.sf.acegisecurity.ui.AutoIntegrationFilter</filter-class><br /></filter><br /><filter><br />聽聽<filter-name>Acegi HTTP Request Security Filter</filter-name><br />聽聽<filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class><br />聽聽<init-param><br />聽聽聽聽<param-name>targetClass</param-name><br />聽聽聽聽<param-value>net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter</param-value><br />聽聽</init-param><br /></filter></pre><br /><br />鏈鍏堝紩璧瘋糠鎯戠殑鏄痭et.sf.acegisecurity.util.FilterToBeanProxy錛孉cegi鑷繁鐨勬枃妗d笂瑙i噴鏄細 鈥淲hat聽聽FilterToBeanProxy does is delegate the Filter's methods through to a bean which is obtained from the <br />Spring application context. This enables the bean to benefit from the Spring application context lifecycle support and configuration flexibility.鈥濓紝濡傚笇鏈涙繁絀剁殑璇濓紝鍘葷湅鐪嬫簮浠g爜搴旇涓嶉毦鐞嗚В銆?br /><br />鍐嶄笅鏉ュ氨鏄坊鍔爁ilter-mapping浜嗭細<br /><pre class="overflow"><filter-mapping><br />聽聽<filter-name>Acegi Channel Processing Filter</filter-name><br />聽聽<url-pattern>/*</url-pattern><br /></filter-mapping><br /><filter-mapping><br />聽聽<filter-name>Acegi Authentication Processing Filter</filter-name><br />聽聽<url-pattern>/*</url-pattern><br /></filter-mapping><br /><filter-mapping><br />聽聽<filter-name>Acegi HTTP BASIC Authorization Filter</filter-name><br />聽聽<url-pattern>/*</url-pattern><br /></filter-mapping><br /><filter-mapping><br />聽聽<filter-name>Acegi Security System for Spring Auto Integration Filter</filter-name><br />聽聽<url-pattern>/*</url-pattern><br /></filter-mapping><br /><filter-mapping><br />聽聽<filter-name>Acegi HTTP Request Security Filter</filter-name><br />聽聽<url-pattern>/*</url-pattern><br /></filter-mapping></pre><br /><br />榪欓噷錛岄渶瑕佹敞鎰忎互涓嬩袱鐐癸細<br />1) 榪欏嚑涓猣ilter鐨勯『搴忔槸涓嶈兘鏇存敼鐨勶紝欏哄簭涓嶅灝嗘棤娉曟甯稿伐浣滐紱<br />2) 濡傛灉浣犵殑搴旂敤涓嶉渶瑕佸畨鍏ㄤ紶杈擄紝濡俬ttps錛屽垯灝?Acegi Channel Processing Filter"鐩稿叧鍐呭娉ㄩ噴鎺夊嵆鍙紱<br />3) 濡傛灉浣犵殑搴旂敤涓嶉渶瑕丼pring鎻愪緵鐨勮繙紼嬭闂満鍒訛紝濡侶essian and Burlap錛屽皢"Acegi HTTP BASIC Authorization <br />Filter"鐩稿叧鍐呭娉ㄩ噴鎺夊嵆鍙?br /><br />[applicationContext.xml]<br />鎺ヤ笅鏉ュ氨鏄娣誨姞applicationContext.xml涓殑鍐呭浜嗭紝浠庡垰鎵岶ilterToBeanFactory鐨勮В閲婂彲浠ョ湅鍑猴紝鐪熸鐨刦ilter閮?br />鍦⊿pring鐨刟pplicationContext涓鐞嗭細<br /><br />1) 棣栧厛錛屼綘鐨勬暟鎹簱涓繀欏誨叿鏈変繚瀛樼敤鎴峰悕鍜屽瘑鐮佺殑table錛孉cegi瑕佹眰table鐨剆chema蹇呴』濡備笅錛?br /><br /><pre class="overflow">CREATE TABLE users (<br />聽聽聽聽username VARCHAR(50) NOT NULL PRIMARY KEY,<br />聽聽聽聽password VARCHAR(50) NOT NULL,<br />聽聽聽聽enabled BIT NOT NULL<br />);<br />CREATE TABLE authorities (<br />聽聽聽聽username VARCHAR(50) NOT NULL,<br />聽聽聽聽authority VARCHAR(50) NOT NULL<br />);<br />CREATE UNIQUE INDEX ix_auth_username ON authorities ( username, authority );<br />ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users<br />(username);</pre><br /><br />2) 娣誨姞璁塊棶浣犵殑鏁版嵁搴撶殑datasource鍜孉cegi鐨刯dbcDao錛屽涓嬶細<br /><br /><pre class="overflow"><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><br />聽聽<property name="driverClassName"><value>${jdbc.driverClassName}</value></property><br />聽聽<property name="url"><value>${jdbc.url}</value></property><br />聽聽<property name="username"><value>${jdbc.username}</value></property><br />聽聽<property name="password"><value>${jdbc.password}</value></property><br /></bean><br /><bean id="jdbcDaoImpl" class="net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl"><br />聽聽<property name="dataSource"><ref bean="dataSource"/></property><br /></bean></pre><br /><br />3) 娣誨姞DaoAuthenticationProvider:<br /><br /><pre class="overflow"><bean id="daoAuthenticationProvider" class="net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider"><br />聽聽<property name="authenticationDao"><ref bean="authenticationDao"/></property><br />聽聽<property name="userCache"><ref bean="userCache"/></property><br /></bean><br /><br /><bean id="userCache" class="net.sf.acegisecurity.providers.dao.cache.EhCacheBasedUserCache"><br />聽聽<property name="minutesToIdle"><value>5</value></property><br /></bean></pre><br /><br />濡傛灉浣犻渶瑕佸瀵嗙爜鍔犲瘑錛屽垯鍦╠aoAuthenticationProvider涓姞鍏ワ細<property name="passwordEncoder"><ref <br />bean="passwordEncoder"/></property>錛孉cegi鎻愪緵浜嗗嚑縐嶅姞瀵嗘柟娉曪紝璇︾粏鎯呭喌鍙湅鍖?br />net.sf.acegisecurity.providers.encoding<br /><br />4) 娣誨姞authenticationManager:<br /><br /><pre class="overflow"><bean id="authenticationManager" class="net.sf.acegisecurity.providers.ProviderManager"><br />聽聽<property name="providers"><br />聽聽聽聽<list><br />聽聽聽聽聽聽<ref bean="daoAuthenticationProvider"/><br />聽聽聽聽</list><br />聽聽 </property><br /></bean></pre><br /><br />5) 娣誨姞accessDecisionManager:<br /><br /><pre class="overflow"><bean id="accessDecisionManager" class="net.sf.acegisecurity.vote.AffirmativeBased"><br />聽聽<property name="allowIfAllAbstainDecisions"><br />聽聽聽聽<value>false</value><br />聽聽</property><br />聽聽<property name="decisionVoters"><br />聽聽聽聽<list><ref bean="roleVoter"/></list><br />聽聽</property><br /></bean><br /><bean id="roleVoter" class="net.sf.acegisecurity.vote.RoleVoter"/></pre><br /><br />6) 娣誨姞authenticationProcessingFilterEntryPoint:<br /><br /><pre class="overflow"><bean id="authenticationProcessingFilterEntryPoint" <br />class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"><br />聽聽<property name="loginFormUrl"><value>/acegilogin.jsp</value></property><br />聽聽<property name="forceHttps"><value>false</value></property><br /></bean></pre><br /><br />鍏朵腑acegilogin.jsp鏄櫥闄嗛〉闈紝涓涓渶綆鍗曠殑鐧誨綍欏甸潰濡備笅錛?br /><br /><pre class="overflow"><%@ taglib prefix='c' uri='http://java.sun.com/jstl/core' %><br /><%@ page import="net.sf.acegisecurity.ui.AbstractProcessingFilter" %><br /><%@ page import="net.sf.acegisecurity.AuthenticationException" %><br /><html><br />聽聽<head><br />聽聽聽聽<title>Login</title><br />聽聽</head><br /><br />聽聽<body><br />聽聽聽聽<h1>Login</h1><br />聽聽聽聽<form action="<c:url value='j_acegi_security_check'/>" method="POST"><br />聽聽聽聽聽聽<table><br />聽聽聽聽聽聽聽聽<tr><td>User:</td><td><input type='text' name='j_username'></td></tr><br />聽聽聽聽聽聽聽聽<tr><td>Password:</td><td><input type='password' name='j_password'></td></tr><br />聽聽聽聽聽聽聽聽<tr><td colspan='2'><input name="submit" type="submit"></td></tr><br />聽聽聽聽聽聽聽聽<tr><td colspan='2'><input name="reset" type="reset"></td></tr><br />聽聽聽聽聽聽</table><br />聽聽聽聽</form><br />聽聽</body><br /></html></pre><br /><br />7) 娣誨姞filterInvocationInterceptor:<br /><br /><pre class="overflow"><bean id="filterInvocationInterceptor" <br />class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor"><br />聽聽<property name="authenticationManager"><br />聽聽聽聽<ref bean="authenticationManager"/><br />聽聽</property><br />聽聽<property name="accessDecisionManager"><br />聽聽聽聽<ref bean="accessDecisionManager"/><br />聽聽</property><br />聽聽<property name="objectDefinitionSource"><br />聽聽聽聽<value><br />聽聽聽聽聽聽CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON<br />聽聽聽聽聽聽\A/sec/administrator.*\Z=ROLE_SUPERVISOR<br />聽聽聽聽聽聽\A/sec/user.*\Z=ROLE_TELLER<br />聽聽聽聽</value><br />聽聽</property><br /></bean></pre><br /><br />榪欓噷璇鋒敞鎰忥紝瑕乷bjectDefinitionSource涓畾涔夊摢浜涢〉闈㈤渶瑕佹潈闄愯闂紝闇瑕佹牴鎹嚜宸辯殑搴旂敤闇姹傝繘琛屼慨鏀癸紝鎴戜笂闈㈢粰鍑?br />鐨勫畾涔夌殑鎰忔濇槸榪欐牱鐨勶細<br />a. CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON鎰忔濇槸鍦ㄦ瘮杈冭姹傝礬寰勬椂鍏ㄩ儴杞崲涓哄皬鍐?br />b. \A/sec/administrator.*\Z=ROLE_SUPERVISOR鎰忔濇槸鍙湁鏉冮檺涓篟OLE_SUPERVISOR鎵嶈兘璁塊棶/sec/administrator*鐨勯〉闈?br />c. \A/sec/user.*\Z=ROLE_TELLER鎰忔濇槸鍙湁鏉冮檺涓篟OLE_TELLER鐨勭敤鎴鋒墠鑳借闂?sec/user*鐨勯〉闈?br /><br />8) 娣誨姞securityEnforcementFilter:<br /><br /><pre class="overflow"><bean id="securityEnforcementFilter" class="net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter"><br />聽聽<property name="filterSecurityInterceptor"><br />聽聽聽聽<ref bean="filterInvocationInterceptor"/><br />聽聽</property><br />聽聽<property name="authenticationEntryPoint"><br />聽聽聽聽<ref bean="authenticationProcessingFilterEntryPoint"/><br />聽聽</property><br /></bean></pre><br /><br />9) 娣誨姞authenticationProcessingFilter:<br /><br /><pre class="overflow"><bean id="authenticationProcessingFilter" <br />class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter"><br />聽聽<property name="authenticationManager"><br />聽聽聽聽<ref bean="authenticationManager"/><br />聽聽</property><br />聽聽<property name="authenticationFailureUrl"><br />聽聽聽聽<value>/loginerror.jsp</value><br />聽聽</property><br />聽聽<property name="defaultTargetUrl"><br />聽聽聽聽<value>/</value><br />聽聽</property><br />聽聽<property name="filterProcessesUrl"><br />聽聽聽聽<value>/j_acegi_security_check</value><br />聽聽</property><br /></bean></pre><br />鍏朵腑authenticationFailureUrl鏄璇佸け璐ョ殑欏甸潰銆?br /><br />10) 濡傛灉闇瑕佷竴浜涢〉闈㈤氳繃瀹夊叏閫氶亾鐨勮瘽錛屾坊鍔犱笅闈㈢殑閰嶇疆:<br /><br /><pre class="overflow"><bean id="channelProcessingFilter" class="net.sf.acegisecurity.securechannel.ChannelProcessingFilter"><br />聽聽<property name="channelDecisionManager"><br />聽聽聽聽<ref bean="channelDecisionManager"/><br />聽聽</property><br />聽聽<property name="filterInvocationDefinitionSource"><br />聽聽聽聽<value><br />聽聽聽聽聽聽CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON<br />聽聽聽聽聽聽\A/sec/administrator.*\Z=REQUIRES_SECURE_CHANNEL<br />聽聽聽聽聽聽\A/acegilogin.jsp.*\Z=REQUIRES_SECURE_CHANNEL<br />聽聽聽聽聽聽\A/j_acegi_security_check.*\Z=REQUIRES_SECURE_CHANNEL<br />聽聽聽聽聽聽\A.*\Z=REQUIRES_INSECURE_CHANNEL<br />聽聽聽聽</value><br />聽聽</property><br /></bean><br /><br /><bean id="channelDecisionManager" class="net.sf.acegisecurity.securechannel.ChannelDecisionManagerImpl"><br />聽聽<property name="channelProcessors"><br />聽聽聽聽<list><br />聽聽聽聽聽聽<ref bean="secureChannelProcessor"/><br />聽聽聽聽聽聽<ref bean="insecureChannelProcessor"/><br />聽聽聽聽</list><br />聽聽</property><br /></bean><br /><bean id="secureChannelProcessor" class="net.sf.acegisecurity.securechannel.SecureChannelProcessor"/><br /><bean id="insecureChannelProcessor" class="net.sf.acegisecurity.securechannel.InsecureChannelProcessor"/></pre><br /><br />[緙哄皯浜嗕粈涔堬紵]<br />Acegi鐩墠鎻愪緵浜嗕袱縐?secure object"錛屽垎鍒欏甸潰鍜屾柟娉曡繘琛屽畨鍏ㄨ璇佺鐞嗭紝鎴戣繖閲屼粙緇嶇殑鍙槸鍒╃敤<br />FilterSecurityInterceptor瀵硅闂〉闈㈢殑鏉冮檺鎺у埗錛岄櫎姝や箣澶栵紝Acegi榪樻彁渚涗簡鍙﹀涓涓狪nterceptor鈥曗?br />MethodSecurityInterceptor錛屽畠緇撳悎runAsManager鍙疄鐜板瀵硅薄涓殑鏂規硶鐨勬潈闄愭帶鍒訛紝浣跨敤鏂規硶鍙弬鐪婣cegi鑷甫鐨勬枃妗?br />鍜宑ontact鑼冧緥銆?br /><br />[鏈鍚庤璇寸殑]<br />鏈潵浠ヤ負鍙槸璇存槑濡備綍浣跨敤Acegi鑰屽凡錛屽簲璇ラ潪甯哥畝鍗曪紝浣嗙湡姝e啓璧鋒潵鎵嶅彂鐜版兂瑕佹潯鐞嗘竻妤氱殑鐞嗛『鎵鏈夐渶瑕佺殑bean榪樻槸寰?br />鍥伴毦鐨勶紝浣嗘効鎴戞病鏈夐仐婕忓お澶氫笢瑗匡紝濡傛灉鎴戠殑鏂囩珷鏈変粈涔堥仐婕忔垨閿欒鐨勮瘽錛岃繕璇峰弬鐪婣cegi鑷甫鐨剄uick-start鑼冧緥錛屼絾璇?br />娉ㄦ剰錛岃繖涓寖渚嬫槸涓嶈兘鐩存帴鎷挎潵鐢ㄧ殑銆?br />鍒嗘瀽鍜屽涔燬pring涓殑jpetstore鐢ㄦ埛綆$悊 <br />聽聽瀛樺湪鐢ㄦ埛鐨勭郴緇燂紝蹇呯劧闇瑕佺敤鎴風殑鐧誨綍鍜岃璇侊紝浠婂ぉ灝遍氳繃鍒嗘瀽Spring涓嚜甯︾殑jpetstore鐨勪緥瀛愭潵瀛︿範涓涓嬪浣曞疄鐜板湪Spring鏋勬灦鐨勭郴緇熶腑鐢ㄦ埛鐧誨綍銆?br />1銆侀鍏堜粠娉ㄥ唽鐢ㄦ埛寮濮嬶紝鍏堢湅鐪媕petstore-servlet.xml涓叧浜庢敞鍐岀敤鎴風殑bean瀹氫箟錛屼粠瀹氫箟鍛藉悕涓氨鍙互鐪嬪嚭涓嬮潰榪欐灝辨槸娉ㄥ唽鐢ㄦ埛鐨勶細<br />聽聽<pre class="overflow"><bean name="/shop/newAccount.do" class="org.springframework.samples.jpetstore.web.spring.AccountFormController"><br />聽聽聽聽<property name="petStore"><ref bean="petStore"/></property><br />聽聽聽聽<property name="validator"><ref bean="accountValidator"/></property><br />聽聽聽聽<property name="successView"><value>index</value></property><br />聽聽</bean></pre><br />1). formView鍛紵浠嶢ccountFormController鐨勬瀯閫犲嚱鏁頒腑寰楀埌錛屽師鏉ヤ負EditAccountForm錛浡犅?br />2). EditoAccountForm.jsp涓樉寰楅潪甯鎬貢錛屽叾瀹炴病鏈夊灝戦毦鐞嗚В鐨勫湴鏂癸紝鏈涓昏鐨勬槸榪欎釜form鏃㈡槸娣誨姞鏂扮敤鎴風殑錛屽張鏄紪杈戠敤鎴蜂俊鎭殑錛屾墍浠ユ樉寰楁湁鐐逛貢緋熺碂鐨勩?br />2銆佹坊鍔犲ソ浜嗘柊鐢ㄦ埛錛屾帴涓嬫潵鐪嬬湅濡備綍鐧誨綍錛屽湪jpetstore-servlet涓彂鐜拌繖涓や釜鐩稿叧bean瀹氫箟錛屽涓嬶細<br />聽聽<pre class="overflow"><bean name="/shop/signon.do" class="org.springframework.samples.jpetstore.web.spring.SignonController"><br />聽聽聽聽<property name="petStore"><ref bean="petStore"/></property><br />聽聽</bean><br />聽聽<bean name="/shop/signonForm.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController"><br />聽聽聽聽<property name="viewName"><value>SignonForm</value></property><br />聽聽</bean></pre><br />1). 絎簩涓猙ean鏄湪榪愯鏃剁敤鎴瘋緭鍏ョ敤鎴峰悕鍜屽瘑鐮佺殑form錛屽彨鍋歋ignonForm錛屽浜庤繖涓?ParameterizableViewController錛岀敤鏂囨。閲岀殑璇濊榪欐槸鏈綆鍗曠殑Controller錛屽叾浣滅敤灝辨槸鍦ㄨ繍琛屼腑鎸囧悜 Controller鑰屼笉鏄洿鎺ユ寚鍚慾sp鏂囦歡錛屼粎姝よ屽凡銆?br />2). SignonForm.jsp錛岄噷闈㈠氨鏄竴涓畝鍗曠殑form錛屽叾action灝辨槸絎竴涓猙ean錛屽嵆/shop/signon.do錛屾渶闇瑕佹敞鎰忕殑鏄?signonForwardAction錛屽叾涓昏浣滅敤鏄痜orward鍒伴渶瑕佽緭鍏ョ敤鎴峰悕鍜屽瘑鐮佺殑閭d釜欏甸潰涓婂幓錛岃繖涓彉閲忓摢閲屾潵鐨勫憿錛熺湅鐪嬩笅闈細<br />聽聽<pre class="overflow"><bean id="secureHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><br />聽聽聽聽<property name="interceptors"><br />聽聽聽聽聽聽<list><br />聽聽聽聽聽聽聽聽<ref bean="signonInterceptor"/><br />聽聽聽聽聽聽</list><br />聽聽聽聽</property><br />聽聽聽聽<property name="urlMap"><br />聽聽聽聽聽聽<map><br />聽聽聽聽聽聽聽聽<entry key="/shop/editAccount.do"><ref local="secure_editAccount"/></entry><br />聽聽聽聽聽聽聽聽<entry key="/shop/listOrders.do"><ref local="secure_listOrders"/></entry><br />聽聽聽聽聽聽聽聽<entry key="/shop/newOrder.do"><ref local="secure_newOrder"/></entry><br />聽聽聽聽聽聽聽聽<entry key="/shop/viewOrder.do"><ref local="secure_viewOrder"/></entry><br />聽聽聽聽聽聽</map><br />聽聽聽聽</property><br />聽聽</bean></pre><br />聽聽鍘熸潵錛屼笂闈㈢殑signonInterceptor瀹炵幇浜唒reHandle錛屽洜姝ゅ湪璇鋒眰涓婇潰鐨刴ap欏甸潰鏃訛紝棣栧厛瑕佺粡榪囪繖涓狪nterceptor錛岀湅鐪?SignonInterceptor鐨勬簮鐮侊紝鍘熸潵鍦ㄥ叾涓負signon.jsp璧嬩簣涓涓猻ignonForwardAction瀵硅薄錛屽懙鍛碉紝鎬葷畻鏄庣櫧浜嗐?br />3). 鎺ヤ笅鏉ュ幓瀛︿範涓涓婼ignonController錛屽叾涓諱綋閮ㄥ垎涓彲浠ョ湅鍑猴紝棣栧厛鍙栧嚭鐢ㄦ埛杈撳叆鐨剈sername鍜宲assword錛岀劧鍚庡埌鏁版嵁搴撲腑楠岃瘉 鏈夋病鏈夎繖涓敤鎴鳳紝濡傛灉娌℃湁榪欎釜鐢ㄦ埛錛岃繑鍥炲悇閿欒欏甸潰錛涘鏋滄垚鍔燂紝棣栧厛鐢熸垚涓涓猆serSession瀵硅薄錛屽湪request鐨剆ession鍔犲叆榪欎釜 userSession錛屾敞鎰忚繖閮ㄥ垎浠g爜涓粰鍑轟簡PagedListHolder鍒嗛〉鐨勭畝鍗曚嬌鐢ㄦ柟娉曪紝鍏充簬鍒嗛〉鏄劇ず錛屼互鍚庡啀瀛︿範鍚с?br />3銆佺櫥褰曟垚鍔熷悗錛屽氨鍙互鏍規嵁涓嶅悓鐨勭敤鎴瘋鏂戒笉鍚岀殑琛屼負浜嗭紝鍙栧緱鐢ㄦ埛淇℃伅錛屾棤闈炲氨鏄粠session鍙栧嚭userSession鍗沖彲銆?br /></div><img src ="http://m.tkk7.com/mkchen/aggbug/90397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/mkchen/" target="_blank">嫻鋒?/a> 2006-12-27 23:20 <a href="http://m.tkk7.com/mkchen/archive/2006/12/27/90397.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://zhnetbar.com" target="_blank">无码中文字幕av免费放</a>| <a href="http://vvww-3499.com" target="_blank">成人无码WWW免费视频</a>| <a href="http://adcacs.com" target="_blank">午夜性色一区二区三区免费不卡视频</a>| <a href="http://tjbdyx.com" target="_blank">亚洲中文字幕无码不卡电影 </a>| <a href="http://bjowj.com" target="_blank">一区二区三区亚洲</a>| <a href="http://kwknc.com" target="_blank">任你躁在线精品免费</a>| <a href="http://222222se.com" target="_blank">亚洲色爱图小说专区</a>| <a href="http://6123fa.com" target="_blank">免费无码H肉动漫在线观看麻豆</a>| <a href="http://ccc16938.com" target="_blank">色噜噜亚洲精品中文字幕</a>| <a href="http://arkinbokis.com" target="_blank">日日狠狠久久偷偷色综合免费</a>| <a href="http://doubaye.com" target="_blank">国产a不卡片精品免费观看</a>| <a href="http://xxxck.com" target="_blank">国产大陆亚洲精品国产</a>| <a href="http://55xxb.com" target="_blank">亚洲阿v天堂在线2017免费</a>| <a href="http://www-kj5799.com" target="_blank">黄色一级毛片免费</a>| <a href="http://shmtweld.com" target="_blank">亚洲人成网站色在线入口</a>| <a href="http://liexion.com" target="_blank">无码免费又爽又高潮喷水的视频 </a>| <a href="http://yy6767.com" target="_blank">114一级毛片免费</a>| <a href="http://7uj3.com" target="_blank">亚洲成人在线免费观看</a>| <a href="http://mangaou.com" target="_blank">美女视频黄免费亚洲</a>| <a href="http://770144.com" target="_blank">亚洲综合激情五月丁香六月</a>| <a href="http://qqcao7.com" target="_blank">国产成人3p视频免费观看</a>| <a href="http://99rlcf.com" target="_blank">一级做a爰片久久毛片免费陪 </a>| <a href="http://acccx.com" target="_blank">最近免费中文字幕大全高清大全1</a>| <a href="http://dasheng178.com" target="_blank">亚洲成在人天堂在线</a>| <a href="http://hberay.com" target="_blank">最近中文字幕免费mv在线视频</a>| <a href="http://91haikala.com" target="_blank">亚洲理论片在线中文字幕</a>| <a href="http://aaa99999.com" target="_blank">色www永久免费视频</a>| <a href="http://2886868.com" target="_blank">国产精品亚洲五月天高清</a>| <a href="http://6609929.com" target="_blank">亚洲色精品88色婷婷七月丁香</a>| <a href="http://77110524.com" target="_blank">久久国产色AV免费观看</a>| <a href="http://4001120002.com" target="_blank">国产精品久久亚洲不卡动漫 </a>| <a href="http://alankell.com" target="_blank">国产成人精品亚洲精品</a>| <a href="http://2828228.com" target="_blank">光棍天堂免费手机观看在线观看 </a>| <a href="http://lebaojj.com" target="_blank">国产亚洲福利在线视频</a>| <a href="http://tjtangpu.com" target="_blank">免费在线观看日韩</a>| <a href="http://rimcn.com" target="_blank">免费国产在线视频</a>| <a href="http://czshenyue.com" target="_blank">亚洲精品自偷自拍无码</a>| <a href="http://18888kj.com" target="_blank">亚洲熟女少妇一区二区</a>| <a href="http://fphs666.com" target="_blank">99无码人妻一区二区三区免费</a>| <a href="http://8mav958.com" target="_blank">特级毛片免费播放</a>| <a href="http://gw311.com" target="_blank">亚洲精品网站在线观看你懂的</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>