??xml version="1.0" encoding="utf-8" standalone="yes"?>
在谈到其安全性的时候,很多的都是从“网l安全”的角度ȝ待问题,D不知,堡垒
的内部是最最不安全的。对付“黑客攻几Z是pȝ理员所要面对的问题Q而如何更好的
加强堡垒内部自n的安全,是在WebE序的设计中需要考虑的问题?br />
pȝ理员所要面对的|络d、操作系l?tng)安全不是我所考虑的问题,如何加强Webpȝ
自n的健h我所最最兛_(j)的事情。?br />
从“构造URL”攻d“注入SQL文”攻击,都是属于q分信Q用户输入Q而造成的安全问题?br />q恰恰应该是由应用程序自w加以重视、解决的问题?br />
Z角色的安全控制已l逐渐的被大家逐渐的接受,每个用户被分配ؓ(f)不同的角Ԍ不同的角?br />h不同的操作权限?但是如何划分角色、用戗操作权限,则是需要认真对待的问题?br />
举例Q?br />一个MISpȝ中,员工有查询工资的权限Q但是某个员工是否具有查询其他员工的权限呢?
不能深入的追问问题,详细的分辨清楚系l中到底有多角艌Ӏ每个用h在的角色Q是不能完成安全控制的?br />btw: (tng)以上的问题,大家不妨在自qcMpȝ中自己去(g)查一下,有此问题的占l大多数吧?br />
看过此文的,愿意回答“是”“否”的Q可以留aQ?tng)也当作一个调查吧?/font>
上面的这个例子,是一个很成熟的办公系l中存在的问题。用客L(fng)script脚本Q控制了(jin)用户的界面操作,D不知maxthon可以解除这个限制。此pȝ中,用户的请求都被整理ؓ(f)URLQget方式提交Q,虽然URL中的键值含义ƈ不是很明显,但是q是可以试着L击,获取U密?br />
认真的核查用L(fng)输入Q利用AOP部vQ细密的对用L(fng)输入q行核查Q是很有必要的事情?br />
某个人、某个资源、某个操作,q三个要素组l在一起则是:(x)某个人对某个资源q行某项操作
实际情况下,许多人、许多资源、对每个资源冰存在着多个操作?br />
h、资源、操作进行划分,可以得到Q?br />具体的某一cMhQ可以对某些资源Q进行某些的操作Q?q就是具体的某项权限限制?br /> (tng) (tng) (tng) 某一cMhQ则可以归纳艌Ӏ?br /> (tng) (tng) (tng) Ҏ(gu)些资源的某些操作Q则可以归纳为工作Q务?br />也就是说Q整个系l是“某个角色去完成某些工作dQ而具体的一个帐户属于某个角Ԍ某项工作则具体的是指Ҏ(gu)个资源进行某个操作”?br />
相对来说Q系l中的h员是最Ҏ(gu)辨认的,pȝ中的资源也是可以在系l的功能调查时分清楚的,pȝ中的操作则是最复杂、最隑ֈ清晰Q甚臛_pȝ完成旉?x)变化的?br />
只有分L清楚?jin)系l中的h、资源、操作,才能辨别清楚pȝ中的具体的权限限制?br />
“基于角色的安全控制”这L(fng)提法Q只提及(qing)?jin)hQ未能强调将资源、操作进行规c,q是很不充分的一U提法?br />
在Webpȝ中,pȝ在设计的q程中,分清楚资源Q分清楚操作Q极大羃?yu)每个页面的功能、提高页面功能的原子性,q也是权限控制对pȝ设计提出的一要求?br />
前面提及(qing)使用AOPq行权限控制Q现在简qC下各部g的功能:(x)
(tng) (tng) 业务模块Q-完成具体的对某个资源的操作;
(tng) (tng) 前台面模块Q- 完成整体面的整合;
(tng) (tng) 安全控制模块Q-实现安全控制功能Q完成h员、角艌Ӏ工作的逻辑判断Q?br /> (tng) (tng) AOP配置整合模块Q-_合安全控制模块和业务模块;
在于如何去解冻I而是如何d现。隐藏v来的问题更是危险?br />
而如何发现问题,则完全是一个素质、能力的事情Q也许这是下一个话题?br />
http://gigix.blogdriver.com/gigix/646694.html
http://webseminar5.unix105.cn4e.com/webseminar/AOSD.ppt
http://sunshineormer.blogdriver.com/sunshineormer/847906.html
看这个图?BR>
对应q段话:(x)“Jacobson指出每一个use case是一个功能切?slice), qؓ(f)use case中的概念扑ֈ?jin)相应的E序对应物,因而可以在后期通过AOP技术将use case slicel入到系l基架构中,从而构成一U全E徏模技术。use case中的generalization可以对应于对象承, 包含(include)可以对应于对象组合和调用, 而扩?entension)对应于AOP。某些use caseh共性,如常见的CURD(Create,Update,Read, Delete)操作Q可以被抽象为参数化的use case, q可以对应于模板(template)概念。?/P>
l合原书Q?BR>如果Reservation里面的Create(),Consume()可以真的分解QCreate()和Consume()的没有Q何关pȝ话,Zq要他们放在Reservation里面呢?是Z(jin)OOQؓ(f)?jin)要把这两个动作攑֜一个类里面Q?/P>
我的意思是Q如果真的用例之间可以被切开Q解x(chng)说的“Tangling”问题,那ؓ(f)何不在实现的时?也把他们分开呢,每个用例一个类Q类g面向q程~程Q?而不是借助于AOPq样的一个中介(貌似的隔)(j)Q最后还是将多个用例之间的代码杂在一起呢Q?既然AOSD把他们放在了(jin)一个类里面Q那么就说们q两个内容确实存在着“Tangling”问题的Q而这个问题是在用例分析阶D就该明的。既然存在着“Tangling”,那么又怎么有一个“切片”,他们隔开呢?
AOSD中也发现一些内容(基础l构Q即领域模型Q是无法在多个用例之间切开的,所以又提出?jin)“公q例”、“基用例”来弥补一些其原型的漏z?到现在ؓ(f)止,我还没发现AOSD中用例切片、用例模块能够多真正解决问题的思\?BR>
事实上,如果真的没有关系的用例,昄也可以在OOA/OOD的过E中分开来,而无这里的AOSD所介绍的这些手Dc(din)?BR>
当然Q对于扩展用例以?qing)非功能性需求,AOSD介绍的内容还是相当不错的?BR>
l箋(hu)研习(fn)中!。。?/P>
原文地址Q?A >http://www-900.ibm.com/developerWorks/cn/java/j-aopwork2/index.shtml 英文地址Q?A >http://www-128.ibm.com/developerworks/java/library/j-aopwork2/ AOP@Work: AOP 工具比较Q第 2 部分 |
![]() |
![]() |
![]() | |
![]() | ||||
![]() |
![]() |
面向斚w~程QAOPQ在 Java?q_上变得日益流行。随着 AOP 出版物和?x)议的增加,q项技术的工具与实现越来越多。虽然h们很清楚 AOP 是面向对象技术的补充Q但?Java 开发h员该如何评估当前?AOP 工具Q特别是每项新技术实现的优劣Q这斚w则相对不那么清楚?/P> 本文有两部分Q而且本文q是 developerWorks 上一个新?AOP pd的第一文章。在本文中,概q?AOP 工具当前的技术状况,比较对于该技术而言最成熟的一些方法:(x)AspectJ、AspectWerkz、JBoss AOP、和 Spring AOPQƈҎ(gu)与每U方法的采用有关的问题。文中还?sh)(x)解释最q宣布的 AspectJ ?AspectWerkz 目合ƈ的意义(请参?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">参考资?/A>Q?/P> 本文无意作ؓ(f) AOP 的介l或某个特定 AOP 实现的入门读物。而是对目前使用最普遍?AOP 技术进行概q。对每个工具的语a机制和工h持的内在优劣q行探讨Q将有助于ؓ(f)目选择最合适的技术。这里定义的指标q(sh)(x)让读者更加容易地评估卛_推出?AOP 工具和特性。关?developerWorks 上介l?AOP 的最新文章列表,请参?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">参考资?/A>?/P> h意本文有两个部分Qؓ(f)?jin)方便读者,两部分同时发布。第 1 部分侧重于这 4 个领先工具各自的 AOP 语言机制处理技术,其中包括工具的方面语法(aspect syntaxQ和切入点的表示、用来声明方面的机制范围{主题?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">W?2 部分l箋(hu)深入介绍领先?AOP 实现如何与现有的开发环境、工具和库进行集成。这一部分包括以下主题Q方面设计器、IDE 插g、可伸羃性和 AOP 工具来的发展方向,q包括对最q?AspectJ ?AspectWerkz 目合ƈ的关注?/P> 选择成熟的工?/SPAN> ?1. ?2004 q?11 ?AOP 工具用户列表中的贴子数量
h?Spring ?AOP 部分没有形成一个独立的下蝲或用L(fng)团,所以用户基数相当比例的用户可能没有l?Spring AOP 发脓(chung)Q而是投在别的主题?sh)?jin)。在 aosd.net 上还列出?4 个额外的工具Q但是它们要么缺乏用戯坛,要么?11 月没有脓(chung)子?/P> AOP 工具虽然没有列在表中前四位,但它在技术上可能非常成熟Q可是缺乏较大的用户基数意味着它们q没有经受过采纳E度试。虽然在本文~写的时候,它们q(sh)适合于商业开发,但是q些工具的日后发展还是值得x(chng)的。通过上表的比较,q可以看出非 Java q_?AOP 工具没有 Java q_的工h熟,但是应当注意 .NET ?C++ 工具的用L(fng)区正在成ѝ?/P> Ҏ(gu)?1Q可以看出,从用户采用度的角度来_(d)AspectJ、AspectWerkz、JBoss AOP ?Spring AOP 是领先的工具。所有这些工具都是适合用于商业开发中的开源项目。按字母序它们排列如下,包括它们 V1.0 版本的发布日期:(x)
都是Z(jin)q接?/SPAN> 支持机制 q接?/I> 是ȝ序和斚w盔R的地斏V静(rn)态连接点允许斚w定义cM的新成员。动态连接点是方面执行与E序执行盔R的地斏V例如,普通的 Java E序执行Ҏ(gu)调用、字D设|这L(fng)q接炏V再比如_(d)误(g)虑一下这样一个问题:(x)Ҏ(gu)? ?1. H出?jin)选中的动态连接点?UML 序列?/B> 下面的编号与图中的编号对应:(x)
切入炏V通知和类型间声明 切入点可以通过昑ּ枚D方式描述q接炚w合。应当用一个示例指?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">?1 所C的 切入Ҏ(gu)?I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">复合QcompositionQ?/I>Q这允许把单的切入点组合成更复杂的切入炏V例如,可以把所? 斚w比较 在这一节中Q将使用一个常见的CZ指出每个工具在方面声明技术上的差异。请考虑?1 所C的
现在Q请看这几个领先?AOP 工具各自是如何处理这个方面的?/P> AspectJ 构徏 AspectJ E序与构?Java E序cMQ其中包括调?AspectJ 的递增~译器,构徏所有的目源文Ӟ包括普通的 Java 源文件。运?AspectJ E序也与q行 Java E序一Ph意要? AspectWerkz h意通知是普通的Ҏ(gu)声明。按照约定,它被当作不同cd的方法声明,因ؓ(f)不应当显式地调用它,而是应该在满特定切入点时自动运行它。AspectWerkz 的切入点声明是附加到切入点“方法”的字符串|也可以在 XML 文g中独立存在。所以,没有切入点的 构徏 AspectWerkz E序?x)涉及(qing)一个标准的 Java 构徏Q然后会(x)涉及(qing)到后处理。要q行 AspectWerkz E序Q必L AspectWerkz 库放在类路径中。在使用不可插入的方面的情况下,?aop.xml 文g配置pȝ中一些方面的包含情况?/P> JBoss AOP ?JBoss 构徏斚w只包括普通的 Java 构徏。JBoss AOP 的运行时截取框架Qinterception frameworkQ负责管理切入点匚w和通知调用。需要对启动和类路径做一些配|,但是 JBoss AOP ?IDE 插g替用户做?jin)这些工作。方面在 jboss-aop.xml 文g中配|?/P> Spring AOP Spring AOP 的技术虽然提供了(jin)更加_的配|,但在它用于 XML Ӟ它与 JBoss AOP 非常cM。构建、运行和配置 Spring AOP 斚w的过E与 JBoss AOP 相同Q但 Spring AOP 依赖的是 Spring 框架方便的、最化的运行时配置Q所以不需要独立的启动器。请注意Q用这个技术,只能通知?Spring 框架(g)索出的对象?/P> 语法差异 每种技术都有它的优势,具体要由使用者决定哪个更适合需求。所以在q一节,简要地讨论一些能够有助于q行决策的要炏V?/P> 自己的风格是什么? 如果使用 AspectWerkz ?JBoss AOP 提供的注释风|那么可以把切入点的表达g XML 转移?Java 成员的注释。这样可以更Ҏ(gu)地ƈ发处理通知体和切入炏V如果选择?AspectJ 的代码风|那么׃(x)发现处理切入Ҏ(gu)觉就像处理代码,而不像是处理非结构化的字W串倹{从 Java 代码能得到的一切(例如“import”语句)(j)Q都可以用于切入炏V对比之下,如果?AspectWerkz、JBoss AOP ?Spring AOP ?XML 和注释风|L需要在规范切入点中的类型引用?/P> z还是繁琐? 昄Q从?2-5 的方面声明来看,代码风格是处?AOP 声明最z的技术。它不需要对通知命名Q也不需要显式地调用通知。代码风g需要显式地把通知l定到切入点Q就?XML 风格那样Q,也不需要把通知l定? 代码风格与注释和 XML 的比?/B> 如果q个结仍然无法~小决策范围Q那么不要担?j)。除?jin)用每种风格~写q些斚w的感觉之外,q有更多需要考虑的东ѝ当在下一节中查看语义的时候,语法决策q(sh)(x)出现Q而且也会(x)影响在第 2 部分中讨论的工具支持?/P> 语义的相似?/SPAN> ?3 ??4 ȝ?jin)每U技术的语义。?zhn)可以注意刎ͼ命o(h)规范上有许多微小的差异和变化Q但是各U技术最l聚合在相同的核?j)概念上。这U聚合有很大的好处,因ؓ(f)q意味着学习(fn)曲线很容易从一?AOP 技术{Ud另外一?AOP 技术。剩下来要考虑的就是每U技术的差异所带来的优劣了(jin)?/P> 回到q接?/SPAN>
另外Q也支持以下没有cd的切入点分类Q?/P>
如表 3 所C,每个工具实现q接Ҏ(gu)型的方式Q以?qing)它们用来匹配连接点的原生切入点Q都略有差异。注意,在某些情况下Q在括号中表C)(j)Q连接点不用切入Ҏ(gu)识?/P> 要富于表现力q是要简单? AspectJ ?AspectWerkz 的连接点模型差不多完全融合,而且已经成ؓ(f)最q的合ƈ的关键促(j)q者之一。JBoss AOP 模型几乎同样有表现力Q只是ؓ(f)?jin)简单性而遗漏了(jin)一些不太常用的q接炏V一个明昄差异是:(x)?JBoss Aop 中,不能把控制流E表C成“在q个切入点的执行之下的所有连接点”。相反,E序员需要手动列?gu)用堆栈中的每个调用?/P> Spring AOP 采用?jin)不同的技术,目的是限制它的连接点模型的表现力。这使它特别Ҏ(gu)采用Q而且对于一些粗_度的横切很有用。即发行的版本与 AspectJ 集成Q提供与_横切机制的互操作性?/P> q接Ҏ(gu)型的表现力与单性的比较
语言机制 切入点匹配和复合QAspectJ、AspectWerkz ?JBoss AOP 提供?jin)类似的cd模式支持。它们三个都允许{斚w的匹配,对于 Java 5 应用E序来说Q这些匹配包括注释和泛型。AspectJ ?AspectWerkz 提供?jin)一U简z的引用多个cd的技术(例如 通知形式QAspectJ 支持比其他技术更多的通知形式Q?JBoss AOP 只支持一U通知形式。每U通知形式都可以表达成 q接点上下文Q在 AspectJ ?AspectWerkz 中,通过指定和绑定切入点参数讉K动态连接点的状态,cM于在 Java 语言中声明方法参数的技术(请参?A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">?2 ??3Q。这接点上下文提供了(jin)?rn)态类型化的好处。JBoss AOP ?Spring AOP 反射性地讉Kq接点的状态,q消除了(jin)在切入点表达式中参数l定的复杂性,代h(hun)是参数静(rn)态类型化。Java E序员(sh)(fn)惯了(jin)Ҏ(gu)参数?rn)态类型化带来的好处,同时q可以从切入点参数的?rn)态类型化得到同样的好处。所以,?JBoss AOP 最q的发行版本中,有提供静(rn)态类型化的“args?的计划?/P> 实例?/B>Q在所有的工具中,斚w的实例化是由 扩展?/B>Q方面的扩展性支持库斚w的部|Ԍq样可以在日后ؓ(f)特定E序而将q些库方面具体化。例如,一个方面库可以提供应用E序监视需要的全部逻辑和基设施。但是,要采用某个特定项目的库,那么库用的切入点必L展成应用E序特定的连接点。AspectJ 用抽象方面支持扩展性,抽象斚w包含抽象的切入点和具体的通知。扩展抽象方面的子方面必d体化切入炏VAspectWerkz ?JBoss AOP 使用?jin)完全不同的技术,没有使用抽象切入Ҏ(gu)制。扩展是通过生成斚w的子cRƈ?XML 中或通过注释定义新的通知l定而实现的。切入点到通知的显式绑定ؓ(f) AspectWerkz ?JBoss AOP 提供?jin)显著优势,从而可以很Ҏ(gu)地把斚w扩展到新pȝQ无需要生成子cR方面库的用数据正在日益增多,q些决定与其他技术用的 Java 风格的承和切入点绑定相比,AspectJ Ҏ(gu)?AOP l承形式是更好还是更差?/P> 每项技术在处理 AOP 的语a机制Ӟ都提供了(jin)自己独特的优~点。用一个简单的列表来ȝq些优缺Ҏ(gu)不可能的Q因为对于不同的目Q每Ҏ(gu)术的好处是各不相同的。但是,以上信息为选择工具或者遇到关键问题时L替代品提供了(jin)指南?/P> l束?/SPAN> 如果本文是在十年之前报道一Ҏ(gu)的模块化技术,那么我们可能此打住Q开始用自己选择的风格来~写斚w —?可能是在命o(h)行用 Emacs 或其他文本编辑器构徏。但是今天,如果没有深入研究一Ҏ(gu)技术如何与现有的开发环境和其他工具集成Qh们是不会(x)L地考虑采用它的?/P> 所以,本文的第二部?/A>把重Ҏ(gu)在集成因素对 AOP工具选择的媄(jing)响。在其他因素之中Q将讨论每个工具如何处理斚w的编译与设计Q以?qing)如何依?IDE 集成与工h持将它们都组合在一赗我q(sh)(x)比较q些工具的基本特性,看看它们背后到底是什么,包括q一步探?AspectJ ?AspectWerkz 目合ƈ之后我们可以期盼从中得到什么?/P>
Account CZ最初出现在 Ramnivas Laddad 撰写?AspectJ in ActionQManningQ?003 q_(d)(j)?BR>
|