安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當(dāng)前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計軟件教程 > acegi參考手冊(v1.0.4)[譯]-第三章 協(xié)助系統(tǒng)

acegi參考手冊(v1.0.4)[譯]-第三章 協(xié)助系統(tǒng)
2010-01-13 23:23:37  作者:  來源:

第三章. 協(xié)助系統(tǒng)

本章介紹一些Acegi Security使用的附加和協(xié)助系統(tǒng)。那些和安全無關(guān),但是包含在Acegi Security項目中的部分,將會在本章中討論

3.1. 本地化

Acegi Security支持對終端客戶可能會看到的異常信息進行本地化。如果你的應(yīng)用是為英文用戶設(shè)計的,那么你什么都不用做,因為Acegi Security的所有消息默認(rèn)都是英文的。如果你要支持其他區(qū)域用戶,那么本節(jié)包含了你所需要了解的所有東西。

包括認(rèn)證失敗或者訪問被拒絕(授權(quán)失敗)的所有異常消息都可以被本地化。提供給開發(fā)者或者系統(tǒng)部署人員的異常或者日志信息(包括錯誤的屬性、接口不符、構(gòu)造器錯誤、debug級日志)沒有被本地化,它們硬編碼在Acegi Security的代碼中。

在acegi-security-xx.jar(譯注:xx代表版本號)的org.acegisecurity包中包含了一個 messages.properties文件。這個文件會被你的application context引用,因為Acegi Security實現(xiàn)了Spring的MessageSourceAware接口,它期待在application context啟動的時候注入一個message resolver。通常你所需要做的是在你的application context中注冊一個引用這個消息的bean,如下所示:

xml 代碼
 
  1. <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
  2.     <property name="basename"><value>org/acegisecurity/messagesvalue>property>  
  3. bean>  

messages.properties是按照資源包標(biāo)準(zhǔn)命名的,它代表了Acegi Securtiy支持的默認(rèn)語言。文件默認(rèn)是英文的。如果你不注冊一個消息源,Acegi Security仍然可以正常工作,它會用回硬編碼的英文消息。

如果你想定制messages.properties文件,或者支持其他語言,那么你應(yīng)該copy這個文件,然后重命名,并在上述的bean定義中 注冊。因為文件中的key并不多,因此本地化花不了多少工夫。如果你針對消息文件進行了本地化,那么請和社區(qū)分享,你可以添加一個JIRA任務(wù),將你正確 命名的messages.properties本地化文件作為附件添加。

為了完善關(guān)于本地化的討論需要知道Spring的ThreadLocal org.springframework.context.i18n.LocaleContextHolder。你應(yīng)該為每個用戶設(shè)置代表他區(qū)域的 LocaleContextHolder。Acegi Security會嘗試從這個ThreadLocal中獲取的Locale來從消息源中獲取消息。請參考Spring的文檔以獲取更多使用 LocaleContextHolder和能夠幫你自動設(shè)置它的輔助類(例如

AcceptHeaderLocaleResolver, CookieLocaleResolver, FixedLocaleResolver, SessionLocaleResolver 等)的詳細信息。

3.2. Filters

正如你在整個手冊中看到的那樣,Acegi Security使用很多filter。你可以使用FilterToBeanProxy或者FilterChainProxy來確定這些是怎樣加入到你的web應(yīng)用中的,下面我們來看看。

大部分filter使用FilterToBeanProxy來配置。例如下面web.xml中配置所示:

xml 代碼
 
  1. <filter>  
  2.     <filter-name>Acegi HTTP Request Security Filter</filter-name>  
  3.     <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>  
  4.     <init-param>  
  5.         <param-name>targetClass</param-name>  
  6.         <param-value>org.acegisecurity.ClassThatImplementsFilter</param-value>  
  7.     </init-param>  
  8. </filter>  

注意在web.xml中的filter實際上是一個FilterToBeanProxy,而不是真正實現(xiàn)filter邏輯的filter。 FilterToBeanProxy所作的是代理Filter的方法到一個從Spring的application context 獲取的bean。這使得這個bean可以享受Spring application context的生命周期支持以及配置靈活性。這個bean必須實現(xiàn)javax.servlet.Filter。

FilterToBeanProxy只需要一個簡單的初始化參數(shù),targetClass或者targetBean。targetClass會定位 application context中指定的類的第一個對象,而FilterToBeanProxy按照bean的名字定位對象。象標(biāo)準(zhǔn)的Spring web應(yīng)用一樣,F(xiàn)ilterToBeanProxy使用 WebApplicationContextUtils.getWebApplicationContext(ServletContext)來訪問 application context,所以你應(yīng)該在web.xml中配置一個ContextLoaderListener。

 

在IoC容器而不是servlet容器中部署Filter會有一個生命周期的問題。特別是,哪個容器應(yīng)該負責(zé)調(diào)用Filter的"startup" 和 "shutdown"方法?注意到Filter的初始化和析構(gòu)順序隨servlet容器不同而不同,如果一個Filter依賴于由另一個更早初始化的 Filter的配置,這樣就會出現(xiàn)問題。另一方面,Spring IoC具備更加完善的生命周期/IoC接口(例如InitializingBean, DisposableBean, BeanNameAware, ApplicationContextAware以及其他許多)以及一個容易理解的接口契約(interface contract),可預(yù)見的方法調(diào)用順序,自動裝配支持,以及可以避免實現(xiàn)Spring接口的選項(例如Spring XML中的destroy-method 屬性)。因此,我們推薦盡可能使用Spring生命周期服務(wù)而不是servlet容器生命周期服務(wù)。FilterToBeanProxy默認(rèn)不會將 init(FilterConfig) 和 destroy()方法委派到被代理的bean。如果你需要這些調(diào)用被委派,那么將lifecycle初始化參數(shù)設(shè)置為servlet- container-managed。

我們強烈推薦你使用FilterChainProxy而不是FilterToBeanProxy。雖然FilterToBeanProxy是一個非 常有用的類FilterToBeanProxy,問題是當(dāng)web.xml中filter變多時,項就會太多而變得臃腫不堪。為了解決這個問題,Acegi Security提供一個FilterChainProxy類。它在FilterToBeanProxy中被裝配(正如上面例子中所示),但目標(biāo)類 (target class)是org.acegisecurity.util.FilterChainProxy。這樣過濾器鏈(filter chain)可以在application context中按照如下代碼配置:

xml 代碼
 
  1. <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">  
  2.     <property name="filterInvocationDefinitionSource">  
  3.         <value>  
  4.             CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON  
  5.             PATTERN_TYPE_APACHE_ANT  
  6.             /webServices/*=httpSessionContextIntegrationFilterWithASCFalse,basicProcessingFilter,exceptionTranslationFilter,  
  7.             /*=httpSessionContextIntegrationFilterWithASCTrue,authenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor  
  8.         value>  
  9.     property>  
  10. bean>  
   

你可能注意到FilterSecurityInterceptor定義方式的相似之處。同時支持正則表達式和Ant Paths格式,越對應(yīng)的URI越早出現(xiàn)。在運行時,F(xiàn)ilterChainProxy會定位符合當(dāng)前的web請求的第一個URI模式。每個對應(yīng)的配置屬 性代表了在application context中定義的一個bean的名字。接著fiter會按照它們被指定的順序,按照FilterChain的標(biāo)準(zhǔn)行為模式被調(diào)用(如果一個 Filter決定停止處理,它可以不在chain中執(zhí)行)。

如你所見,F(xiàn)ilterChainProxy需要為不同的請求模式重復(fù)配置filter的名字(在上面的例子中,, exceptionTranslationFilter 和 filterSecurityInterceptor 是重復(fù)的)。這樣的設(shè)計是為了讓FilterChainProxy能夠為不同的URI配置不同的filter調(diào)用順序,同時也提高了表達力(針對正則表達 式、Ant Paths、以及任何FilterInvocationDefinitionSource的特定實現(xiàn))和清晰度,可以知道是哪個filter應(yīng)該被調(diào)用。

你可能注意到了我們在filter chain定義了兩個HttpSessionContextIntegrationFilter (ASC是allowSessionCreation的縮寫,是HttpSessionContextIntegrationFilter的一個屬性)。 因為web服務(wù)不會為將來的請求提供一個jsessionid,為這樣的用戶創(chuàng)建HttpSessions是浪費的。如果你有一個需要最大限度的伸縮性的 高容量的應(yīng)用,我們建議你使用上述的方法。對于小的應(yīng)用,使用單一的HttpSessionContextIntegrationFilter (默認(rèn)的allowSessionCreation設(shè)為true)應(yīng)該足夠了。

說到生命周期問題,如果對FilterChainProxy自身調(diào)用init(FilterConfig) 和 destroy()方法,它會把它代理到底層的filter。這樣FilterChainProxy保證只初始化和析構(gòu)每個filter一次,不論它在 FilterInvocationDefinitionSource中定義了多少次。你可以通過FilterToBeanProxy的lifecycle 初始化參數(shù)來控制這些方法是否被調(diào)用。如上面所討論的那樣,默認(rèn)所有servlet容器生命周期調(diào)用是不被代理到FilterChainProxy的。

在web.xml中定義的filter的順序是非常重要的。不管你實際用到哪個filter,的順序應(yīng)該是如下所示的:

1.ChannelProcessingFilter,因為可能要重定向到另一種協(xié)議。

2.ConcurrentSessionFilter 因為不使用任何SecurityContextHolder的功能,但是需要更新SessionRegistry來表示當(dāng)前的發(fā)送請求的principal。

3. HttpSessionContextIntegrationFilter, 這樣當(dāng)一個web請求開始的時候就可以在SecurityContextHolder中設(shè)置一個SecurityContext,當(dāng)web請求結(jié)束的時候 任何對SecurityContext的改動都會被copy到HttpSession(以備下一個web請求使用)。

4.Authentication processing mechanisms - AuthenticationProcessingFilter, CasProcessingFilter, BasicProcessingFilter, HttpRequestIntegrationFilter, JbossIntegrationFilter 等 - 修改SecurityContextHolder,使其中包含一個有效的認(rèn)證請求令牌(token)。

5.SecurityContextHolderAwareRequestFilter, 如果你使用它來在你的servlet容器中安裝一個Acegi Security aware HttpServletRequestWrapper。

6.RememberMeProcessingFilter, 如果早期的認(rèn)證處理過程沒有更新SecurityContextHolder,并且請求(request)提供了一個cookie啟用remember- me服務(wù),一個合適的被記住的Authentication對象會被放到SecurityContextHolder那里。

7.AnonymousProcessingFilter, 如果早期的認(rèn)證處理過程沒有更新SecurityContextHolder,, 一個匿名Authentication 對象會被放到SecurityContextHolder那里。

8.ExceptionTranslationFilter, 捕獲所有的Acegi Security 異常,這樣要么返回一個HTTP錯誤響應(yīng)或者加載一個對應(yīng)的AuthenticationEntryPoint。

9.FilterSecurityInterceptor, 保護 web URIs

所有上述的filter使用FilterToBeanProxy或FilterChainProxy。建議在一個應(yīng)用中使用一個單個的 FilterToBeanProxy代理到一個單個的FilterChainProxy。,在FilterChainProxy中定義所有的Acegi Security Filters。如果你使用SiteMesh,確保Acegi Security filters 在 SiteMesh filters調(diào)用前調(diào)用。這樣使SecurityContextHolder在SiteMesh decorator使用前能夠及時被裝配。


安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 精密电动平移台|光学隔振平台|手动位移台|隔振平台|电动滑台-北京集科仪器 | 耐力板厂家_pc耐力板价格_透明耐力板批发-佛山市麦粒建材有限公司 | 智能电磁流量计-超声波流量计-涡街流量计-液体涡轮流量计-大连计测机器有限公司 | 墙板_户外墙板_ASA共挤户外墙板-康亿家生态木业集团 | 阻抗分析仪 阻抗测试仪 介电常数测试仪 充电枪测试仪-苏州腾斯凯电子科技有限公司 | 深圳喜运达物流官网_东南亚物流|海运|专线|海外仓_泰国菲律宾马来西亚海运|物流专线|海外仓 | 重庆监控-监控系统-大型弱电工程-重庆万建电子工程有限责任公司是智能化一级工程公司 | 制冷机组|地源热泵|冷水机组|磁悬浮冷水机组-山东鹏鲲空调官网 | 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 面粉加工设备-面粉加工机械-面粉机组-面粉磨粉机-面粉机成套设备-河南粮院机械制造有限公司 | 昆明护栏网厂家_隔离栅_围栏网_石笼网「13年生产经验」-云南北辛商贸 | 全自动圆木多片锯_立式圆木多片锯价格_大型圆木多片锯厂家-邢台友创机械制造有限公司 | 无机纤维抗菌板-A级不燃纤维板-石英纤维板厂家-医疗抗菌板-浙江德耐姆 | 烟囱防腐_维修_刷航标_美化_加固_刷色环 | 联想南京总代理-联想服务器|联想电脑笔记本代理商|联想工作站|dell服务器|HP服务器|南京IBM代理商|IBM V5000存储总包销-南京宇宽科技有限公司 | 无心磨床- 无锡润一机床有限公司| 腾云网-智慧网络营销服务提供商| 碳化硅微粉_超细碳化硅微粉-潍坊凯华碳化硅微粉有限公司 | 辽宁大卯新能源供热设备制造有限公司官方网站,大卯新能源,大卯新能源供热设备 | 长春互联网运营值选星广传媒,长春短视频运营,长春新媒体运营,长春互联网运营,长春抖音运营,吉林视频号代运营,吉林快手代运营,短视频推广公司,公众号运营,微博运营,新媒体运营 | 胶球清洗-射水抽气器-磷酸盐加药装置-连云港振辉机械设备有限公司 | 品润财税_广州公司注册_南沙代理记账服务_危化证出口退税外国人工作签证代办 | 全功能护理训练模拟人-创伤护理人-高级电脑心肺复苏模型-上海康季 | 基坑护栏,临边护栏网,爬架网,爬架网片,铁路防护栅栏,公路护栏网,河北昊坤金属制品有限公司 | 绍兴宇力半导体有限公司官网 | 上海塑料链条生产厂家-塑料网带批发-柔性齿形链价格-上海瀚幽传动机械有限公司 | 苏子富春品牌馆 抚顺市富春农业科技开发有限公司 抚顺特色农产品 抚顺市特色馆 | 太原塑料托盘,塑料筐,塑料箱,塑料垃圾桶_太原都程塑料制品有限公司 | 南京申信智能科技有限公司 | 潍坊亿宏重工机械有限公司,破碎机,高性能立磨机,颚式破碎机,锤式破碎机反击式破碎机,重锤式破碎机,高性能反击式破碎机,圆锥式破碎机,给料机系列,链板给料机系列,简易给料机系列,振动给料机 | 指纹锁_智能锁_指纹密码锁_智能锁十大品牌_智能门锁厂家-深圳市豪力士智能科技有限公司 | 上海升降机_导轨式升降货梯_移动铝合金升降机_上海力盏电动液压平台厂家 | 途远VR+_成都VR全景制作_成都360全景漫游_成都720全景航拍_成都途远科技有限公司 | 美标球阀_美标闸阀-浙江川一阀门有限公司 | 上海鑫鹏塑料制品有限公司 | 临沂网站建设,临沂网站制作,临沂网络公司,临沂小程序开发,临沂网站设计,沂水网站建设,沂南网站建设,蒙阴网站建设,平邑网站建设,费县网站建设,兰陵网站建设,郯城网站建设,临沭网站建设,莒南网站建设,兰山网络公司 | 陕西筱润智能科技有限公司 干部人事智能档案柜 智能密集架 智能档案柜 部队选层文件智能柜 智能枪弹柜 财务智能档案柜 边防武警智能密集架 医院智能档案柜 部队选层文件智能柜智能枪弹柜 学校医院文件柜 企事业单位公检法智能文件柜 生产厂家-筱润智能科技有限公司 RFID射频智能密集架 全自动智能选层档案柜 智能密保柜 枪柜部队营房营具床桌椅办公家具 办公用品档案盒设备货架 全自动智能选层柜生产厂家-筱润智能科技有限公司 | 泰安led显示屏-泰安户外裸眼3D显示屏-扩声系统-舞台灯光机械-电子屏-肥城宁阳新泰东平-泰安市奇美特电子有限公司 | 柔性电缆-专业机器人电缆,拖链电缆生产厂家 | 压力机-压装机-黄油机-黄油泵-[广东品嘉灵]专业定制各种精密压装设备 | 太原重卡叔叔运输有限公司-山西太原大件运输、太原物流公司、太原货运物流、太原大件运输、太原货运信息、长治物流公司、长治大件运输、晋城物流公司、晋城大件运输、忻州大件运输、朔州大件运输、阳泉大件运输、大同大件运输、吕梁大件运输、临汾大件运输、运城大件运城 |