




已阅读5页,还剩48页未读, 继续免费阅读
(计算机系统结构专业论文)基于面向方面技术的软件安全框架的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆大学硕士学位论文中文摘要 摘要 随着软件的安全问题日益突出,因此各种解决方法陆续提出,但是效果不甚 理想。大部分研究人员由于缺少实际安全经验而未对引发安全问题的原因未作正 确深入的分析,因而忽略了软件自身的安全问题,把主要精力集中在了网络安全 技术,和信息系统安全大框架上,而对引发安全问题的方面却无所作为。 一部分安全领域的实际工作者意识到了软件自身安全的重要性,并对其进行研 究。但是现阶段的主要研究方法是:列举安全问题及其成因,并通过提高开发人员 的安全意识来解决软件安全问题,也就是还停留在经验主义阶段,由于软件规模 的日益庞大,这种方法也日渐无能为力。 通过分析,归纳,本文得出现在的软件安全存在如下几个问题: l 现存的开发环境不能适合安全开发的需求:既没有统一的切实可行的软件安 全开发流程也没有一个简单而高效的软件安全体系框架 2 ,现有的软件开发方法( o o 方法) 要求普通的开发人员也要具有相当丰富的安 全知识,这样才能实现软件的安全。 论文主要集中在软件安全框架的研究上。首先通过分析得出了面向方面技术解 决安全的可行性以及相对传统软件开发方法的优势的结论。然后详细分析了j 2 e e 的安全管理机制的原理、优势和弱点。在a s p e c t j 语言的基础上,提出了一个安 全体系指导框架,实现该框架的流程。并解决了实现该框架的体系结构上的难题。 最后通过对一个实际的f t p 服务器的安全特性上的改进,实现了该框架。并改进 后的结果进行了分析以及与原系统之间的性能比较。 关键词:面向方面,软件安全,中间件,容器,j 2 e e ,a s p e c t j 重庆大学硕士学位论文 英文摘要 a b s t r a c t t h es e c u r i t yo fs o f t w a r eb e c o m e sam o r es e r i o u sp r o b l e md a y b yd a y , t h e r ea r e s o m ew a y st oa v o i di t b u tt h er e s u l t sa r en o ts ow e l l t h em o s ta m o u n to ft h e r e s e a r c h e r sd o e s n tt a k ei ta sap r o b l e m ,b e c a u s et h e yd o n th a v ee n o u g h e x p e r i e n c eo f t h es e c u r i t nt h e yi g n o r et h es e c u r i t yp r o b l e mo fs o r w a r ei t s e l a n dm a k i n gt h e i rm o s t e n e r g yo nn e t w o r ks e c u r i t yt e c h n o l o g ya n di n f o r m a t i o ns y s t e ms e c u r i t y , b u th a v en o i d e ao f t h ea s p e c tw h i c h l e a d i n g t ot h es e c u r i t y p r o b l e m t h e r ea r es o m er e s e a r c h e r so n s e c u r i t yp a y a t t e n t i o nt ot h es e c u r i t yo f t h e s o f t w a r e , a n dd os o m er e s e a r c ho ni t b u ta tp r e s e n tt h em a i nm e t h o d so nt h i sp r o b l e m i s :l i s t i n g t h er e a s o n so ft h e s e c u r i t yp r o b l e ma n de n h a n c i n gs e c u r i t yc o n s c i o u s n e s so ft h e r e s e a r c h e r s t h i sm e t h o dd o e s n tw o r kw h i l et h es o f t w a r eb e c o m e s l a r g e ra n dl a r g e r t h et h e s i ss u m m a r i z e ss o m ec o n c l u s i o n s b yr e s e a r c h i n g : 1t h e d e v e l o p i n ge n v i r o n m e n td o e s n tf i t t h en e e d so ft h es e c u r i t yd e v e l o p i n g t h e r ei s n taf e a s i b l es o f t w a r es e c u r i t yd e v o l o p m e n t p r o c e s s i n g , n e i t h e ras i m p l ea n d h i 曲e f f i c i e n c ys o f t w a r es e c u r i t yf r a m e 2o n p r e s e n ts o f t w a r ed e v o l o p m e n tm e t h o d ,e v e f lt h ej u n i o rc o d e rn e e dt oh a v e p l e n t i f u lk n o w l e d g e o f s e c u r i t yt or e a l i z es e c u r i t yo f s o f t w a r e t h et h e s i sm a i n l yi n t r o d u c e ss o f t w a r es e c u r i t yf r a m e f i r s t l y :o nt h i sp a p e r , w e c o n c l u d et h ec o n c l u s i o n 1o oc a nb eu s e dt os o l v e p r o b l e mo f n e t w o r ks e c u r i t y 2o oi ss u p e r i o rt ot r a d i t i o n a ls o f t - w a r ed e v o l o p m e n tm e t h o d s e c o n d l y , t h et h e s i sa n a l y z e ss e c u r i t ym a n a g e m e n tm e c h a n i s mo fj 2 e e ,t h e p r i n c i p l e ,s u p e f i o r i t ) ra n dw e a k n e s s w e i n 廿o d u c eaf r a m eo f s e c u r i t y , t h ep r o c e s s i n gt o i t ,a l lb a s e d o n a s p e c t j w e a l s os o l v i n gp r o b l e mo f r e a l i z et h ea r c h i t e c t u r e f i n a l l y , w er e a l i z et h ea r c h i t e c t u r eb yi m p r o v i n gt h es e c u r i t ym e c h a n i s mo fa 邱 s e r v e r a n dt h et h e s i sa n a l y z e st h er e s u l t so f t h e i m p r o v e d ,a tt h em e a n w h i l ec o m p a r i n g i tw i t ht h ei n i ts y s t e m k e y w o r d s :a s p e c t - o r i a n t e d ,s o f t w a r es e c u r i t y ,m i d d l e w a r e ,j 2 e e ,a s p e c t j 重庆大学硕士学位论文1 绪论 1绪论 1 1 问题的提出及研究意义 随着信息技术在各行各业中的广泛应用以及互联网的日益普及,人们对计算 机网络的依赖日甚一日,在享受计算机带来便利的同时,人们日益关注对软件系 统引发的安全问题。因此研究人员对网络安全投入了大量的精力,但是有一个很 重要的问题被忽略了,那就是软件自身的安全性。如果软件自身的安全性没 有搞的如此糟糕的话,我们就毋须在网络安全性方面花费如此多的精力。经过研 究表明,那些引起严重安全问题软件漏洞:如由于软件的格式化处理错误,让黑 客可以通过发送特殊包而捣毁某些服务:又如因某种缓冲区漏洞,使攻击者可以 发送特定的畸形消息包得以控制计算机;再如某个加密漏洞,让攻击者可以读取 加密信息或愚弄认证系统。而如此种种,其实都是软件自身的问题。 有时候,网络安全可以防范这些漏洞:某些防火墙可以阻挡特定类型的数据 包,或者只允许来自可信源的连接( 但是攻击者有可能在防火墙里面,也没被可 信资源雇佣) ;入侵检测系统也可以检测到某些特定漏洞时报警,可管理的安全监 控服务可以侦察到正在作案的线索并立即中断这种入侵。然而由于网络安全问题 只是软件安全引发的现象,所以这些都是治标不治本的解决方案,并且还要消耗 额外的资源。极大的降低系统运行的效率。如果我们能解决引发这些问题的根源 一一软件自身的安全问题( 另一种原因是“社交工程”) ,那么我们就能极大的提 高互联网和其它应用环境的安全性。 软件的安全在近几年也取得了长足的进步。在涉及软件安全的各个领域( 认 证、加解密、权限控制等) 研究人员都取得了丰硕的成果。尽管如此,如下的现 象还是频繁的发生着: l 、顶级的软件公司有优秀的软件安全专家,有先进的涉及软件安全各领域的 研究成果,但是现如今,仍然跳不出软件“漏洞”“补丁”“再漏 洞”“再补丁”的怪圈。 2 、同一错误在多处屡次重复。 3 、存在大量低级的、不堪一击的错误。 造成这些现象的原因又是什么,结合软件系统安全的特点,经过对大量的软 件安全漏洞和现有软件开发环境的分析,我们可以得出如下的结论: 1 、现有的软件体系结构和开发方法( 0 0 方法) 不能将这些研究成果很好的整 合在一起,所以不利于安全特性的模块性。 重庆大学硕士学位论文1 绪论 2 、为了实现软件的安全,现有的软件开发方法( 0 0 方法) 要求普通的开发人 员也要具有相当丰富的安全知识。 综上,蓬勃发展的网络迫使我们必须改进当前的软件开发方法和体系结构以 使其更好的适应对软件安全特性的需求。 面向方面技术产生于上世纪9 0 年代,最近几年得到了蓬勃的发展。通过对面 向方面技术的研究,可以看出,面向方面技术的思想和技术特点可以很好的满足 我们所提出的要求,因此我们提出了“面向方面技术在软件安全框架中的研究” 这个研究课题。 1 2 国内外研究现状 1 2 1 面向方面( a o ) 技术研究现状 上世纪9 0 年代中期,施乐公司的帕洛阿尔托研究中心( x e r o xp a r c ) 首先提出 了a o 的编程技术。但是由于当时软件开发主要偏重于对软件功能的实现,而面向 对象( 0 0 ) 可以很好的满足要求,因此a o 并未取得多大的发展。然而从上个世纪 末至今,由于互联网中分布式系统的广泛应用,用户对软件的非功能需求( 安全性, 健壮性等) 亦提出很高的要求,o o 的不足之处和a o 的优势便凸显出来,从而吸引 了大批研究人员开始对a 0 进行研究:如对开发方法的改进;对体系框架的重新设 计使其满足特定的需求;对a o 概念、细节的补充、完善以及对原来各种语言添加 a o 特性等。 虽然现阶段的a 0 还处于相当不完善的阶段:它只能应用于很少的几种语言环 境下,并且必须掌握源代码才能进行织入,还有许多概念没有同一和完善。但以 r u p 之父i v a rj a c o b s o n 为代表的科学家们仍对a 0 推崇备至,他们认为a o 将最 终改变整个软件开发方式,并且更完美的实现“用例驱动”的开发思想。 1 2 2 软件安全( s s ) 研究现状 大部分研究人员由于缺少实际安全经验而未对引发安全问题的原因未作正确 深入的分析,因而忽略了软件自身的安全问题,把主要精力集中在了网络安全技 术,和信息系统安全大框架上,而对引发安全问题的细微方面( 如缓冲区漏洞,格 式化字符串问题) 无所作为( 他们把它认为是开发人员的疏忽) ,但要注意:一个系 统的安全性取决于该系统最薄弱的部分,并且经过研究表明近几年引发严重安全 危机恰恰是这些细微的方面( 其中缓冲区漏洞占到了6 0 以上) 。 一部分安全领域的实际工作者意识到了软件自身安全的重要性,并对其进行 研究。但是现阶段的主要研究方法是:列举安全问题及其成因并通过提高开发人 员的安全意识来解决软件安全问题,也就是还停留在经验主义阶段,由于软件规 重庆大学硕士学位论文l 绪论 模的日益庞大,这种方法也日渐无能为力。 通过分析,归纳,本文得出现在的软件安全存在如下几个问题: 1 现存的开发环境不能适合安全开发的需求。 1 没有统一的切实可行的软件安全开发流程。 2 没有一个简单而高效的软件安全体系框架 2 为了实现软件的安全,现有的软件开发方法( o o 方法) 要求普通的开发人员 也要具有相当丰富的安全知识。 1 3 本文研究目的及内容 1 3 1 本文的研究目的 本文的主要研究目的是对j 2 e e 的软件安全框架进行研究,利用a o 这种新的 软件开发技术,在a s p e c t j 语言的基础上,提出了个安全体系指导框架。使软 件的安全特性可以更好的被设计、开发、管理、监控。 1 3 2 本文的主要研究内容 本研究工作主要涉及以下内容: ( 1 ) 详细分析了j 2 e e 的安全管理机制的原理、优势和弱点。 ( 2 ) 结合软件安全的各个方面,通过对比研究,说明了面向方面技术比容器管 理在安全实现方面的优点。 ( 3 ) 在a s p e c t j 语言的基础上,提出了一个安全体系指导框架,并解决了实现 该框架的体系结构上的难题。 ( 4 ) 通过对一个实际的f t p 的安全改造,实现并验证了该框架。 1 4 本文后续章节的安排 本文后续章节的安排如下:第二章主要介绍软件安全的特点和对软件安全问 题的成因进行分析。第二章主要介绍a o 技术的基本概念。第三章主要介绍了j 2 e e 所提出的安全模型并对其进行了详细的分析。第四章在a s p e c t j 语言的基础上, 提出了一个安全体系指导框架,并解决了实现该框架的体系结构上的难题。第五 章通过一个实例验证了该框架。第六章对本文工作进行总结,并提出要改进之处。 重庆大学硕士学位论文2 面向方面的软件开发技术 2 面向方面的软件开发技术 2 1 软件开发方法的演进 在计算机科学的早期阶段,开发人员使用简单的机器级代码来编程。不幸的 是,程序员得花费更多时间来考虑一种特定机器的指令集而不是手中需要解决的 问题本身。慢慢地,我们转而使用允许对底层机器做某种抽象的高级语言。然后 是结构化语言,我们可以把问题分解成一些必要的过程来完成任务。但是,随着 复杂度的增加,我们又需要更适合的技术。面向对象( o o ) 的开发方法使我们可 以把系统看作是一批相互合作的对象。类允许我们把实现细节隐藏在接口下。多 态性为相关概念提供公共的行为和接口,并允许特定的组件在无需访问基础实现 的前提下改变特定行为。 编程方法和语言决定了我们和计算机交流的方式。每一种新的方法学都提出 一种新的分解问题的方法:机器码、伪代码、过程和类等。每种新的方法学都使 得从系统需求到编程概念的映射更加自然。编程方法学的发展让我们可以建立更 加复杂的系统。反过来说也就是,我们能够建立更加复杂的系统是因为这些技术 允许我们处理这种复杂度。 2 2 面向对象开发方法的不足 2 2 1 主流功能的角度 现在,大多数软件项目都选择面向对象的开发方式。确实,面向对象已经表 明了它处理一般行为的能力。面向对象技术很好地解决了软件系统中角色划分的 问题。借助于面向对象的分析、设计和实现技术,开发者可以将问题领域的“名 词”转换成软件系统中的对象,从而很自然地完成从问题到软件的转换。 相当复杂 图2 1 面向对象示意类图 f i 9 2 1t h e0 0d e m oc l a s sv i e w 4 重庆大学硕士学位论文2 面向方面的软件开发技术 但是传统的程序经常表现出一些不能自然地适合单个程序模块或者几个紧密 相关的程序模块的行为例如日志记录、对上下文敏感的错误处理、性能优化以及 设计模式等等,如图2 1 所示。 如果书写过实现这些特性的代码,您就会知道缺乏模块性所带来的问题。因 为它们虽然具有极大的相似度却是分散的,开发人员发现这种行为难以作逻辑思 维、实现和更改让我们来看上图中c 6 的实现: p u b i cc l a s ss o m e b u s i n e s s c l a s se x t e n d so t h e r b u s i n e s s c l a s s f 核心数据成员 其它数据成员:日志流,保证数据完整性的标志位等 重载基类的方法 p u b l i ev o i dp e r f o r m s o m e o p e r a t i o n ( o p e r a t i o n i n f o r m a t i o ni n f o ) 安全性验证 检查传入数据是否满足协议 锁定对象以食品店当其他线程访问时的数据完整性 检查缓存中是否为最新信息 i g 录操作开始执行时间 执行核心操作 l l g 录操作完成时间 给对象解锁 一些类似操作 p u b l i cv o i ds a v e ( p e r s i t a n c e s t o r a g ep s ) p u b l i cv o i ds a v e ( p e r s i t a n c e s t o r a g ep s ) ) 在上面的代码中,我们注意到如下几个问题: 1 其它数据成员不是这个类的核心关注点; 2 p e r f o r m s o m e o p e r a t i o n0 的实现做了许多核心操作之外的事,它要处理日 志、验证、线程安全、协议验证和缓存管理等一些外围操作,而且这些外 围操作同样也会应用于其他类: 3 而且通过图2 1 可以知道,在其它类中除了执行相关的核心操作,也要执 行这些相似的非核心操作。 重庆大学硕士学位论文2 面向方面的软件开发技术 2 2 2 非主流功能的角度 我们再从另一个角度非主流功能的角度,来进行分析。下图是w e b 服务器 t o m c a t 中关于日志代码的分布情况。“,其中的白色长方形为类,红色的片断为日 志代码,从中可以看出同一个日志功能却被分散在许多类中,这极大的影响了软 件的模块化、易管理和维护性。 图2 2t o m c a t 中日志代码分布程度面 f i 9 2 2d e g r e eo fs c a t t e r i n go fl o g g i n gc o d ei nt o m c a t 由此研究人员提出关注点的概念来解释这种现象。一个关注点( c o n c e r n ) 就是 一个特定的目的,一块我们感兴趣的区域。从技术的角度来说,一个典型的软件 系统包含一些核心的关注点和系统级的关注点。举个例子来说,一个信用卡处理 系统的核心关注点是借贷存入处理,而系统级的关注点则是日志、事务完整性、 授权、安全及性能问题等,许多关注点会在多个模块中出现,我们把这种关注点 称为横切关注点( c r o s s c u t t i n gc o n c e r n s ) 。使用现有的面向对对象开发方法, 横切关注点会横跨多个模块,结果是使系统难以设计、理解、实现和演进。 我们可以把一个复杂的系统看作是由多个关注点来组合实现的。一个典型的 系统可能会包括几个方面的关注点,如业务逻辑、性能,数据存储、日志和调度 信息、授权、安全、线程、错误检查等,还有开发过程中的关注点,如易懂、易 维护、易追查、易扩展等,图2 3 演示了由不同模块实现的一批关注点组成一个 系统。 6 重庆大学硕士学位论文2 面向方面的软件开发技术 图2 3 方面的合成 f i 9 2 3c o m p o s i t i o no fa s p e c t 图2 4 把需求比作一束穿过三棱镜的光。我们让需求之光通过鉴别关注点的 三棱镜,就会区别出每个关注点。 图2 4 方面的分离 f i 9 2 4s e p a r a t i o no ft h ea s p e c t s 开发人员建立一个系统以满足多个需求,我们可以大致地把这些需求分类为 核心模块级需求和系统级需求。系统级需求一般来说是相互独立的,但它们一般 都会横切许多核心模块。举个例子来说,一个典型的企业应用包含许多横切关注 点,如验证、日志、资源地、系统管理、性能及存储管理等,每一个关注点都牵 涉到几个子系统,如存储管理关注点会影响到所有的有状态业务对象。 虽然横切关注点会跨越多个模块,但当前的面向对象技术倾向于使用一维的 方法学来处理这种需求,把对应需求的实现强行限制在一维的空间里。这个一维 空间就是核心模块级实现。其他需求的实现被嵌入在这个占统治地位的空间。换 句话说,需求空间是一个i 2 维空间,而实现空间是一维空间,这种不匹配导致了 糟糕的需求到实现的映射。 重庆大学硕士学位论文2 面向方面的软件开发技术 2 2 3 目前的方法学的一些问题 用现在的方法学实现横切关注点效果比较差。而且还会带来一些问题,我们 可以大致把这些问题分为两类。 代码混乱:软件系统中的模块可能要同时兼顾几个方面的需要。比如,开 发者经常要同时考虑业务逻辑、性能、同步,日志和安全等问题,兼顾各 方面的需要导致相应关注点的实现元素同时出现,引起代码混乱。 代码分散:由于横切关注点本来就涉及到多个模块。相关实现也就得分散 在这些模块中。如在一个使用了数据库的系统里,性能问题就会影响所有 访问数据库的模块。这导致代码分散在各处。 而混乱和分散的代码会从多个方面影响系统的设计和开发,于是就会产生下 面的问题: 可读性差:同时实现几个关注点模糊了不同关注点的实现,使得关注点与 其实现之间的对应关系不明显。 低产出:同时实现几个关注点把开发人员的注意移到外围关注点,导致生 产效率降低。 低代码重用率:由于一个模块实现多个关注点,因此其他需要类似功能的 系统不能马上使用该模块,进而降低了生产效率。 代码质量差:混乱的代码掩盖了代码中隐藏的问题。而且,由于同时要处 理多个关注点。应该特别注意的关注点得不到应有的关注。 扩展性差:狭窄的视角和有限的资源总是产生仅注意当前关注点的设计, 新的需求导致重新实现。由于实现不是模块化的,就是说实现牵涉到多个 模块,为了新需求修改子系统可能会带来数据的不一致,而且还需相当规 模同测试来保证这些修改不会带来b u g 。 给设计带来的影响:优秀的系统设计师不仅会考虑当前需求,还会考虑到 可能会有的需求以避免到处打补丁。 这样就存在一个问题预知将来是很困难的,如果你漏过了将来可能会有 的横切关注点的需求,你将会需要修改或甚至是重新实现系统的许多部分:从另 一个角度来说,太过于关注不一定需要的需求会导致过分设计的、难以理解的、 臃肿的系统。所以系统设计师处在这么一个两难局面中:怎样设计才算是不过分 设计? 应该宁可设计不足还是宁可过分设计? 例如,设计师是否应该在系统中包 含现在并不需要的日志机制? 如果是的话,哪里是应该写日志的点? 日志应该记 录那些信息相似的例子还有关于性能的优化问题,我们很少能预知瓶颈的所在。 常用的方法是建立系统,p r o f i l e 它,然后翻新系统以提高性能,这种方式可 能会依照p r o f i l i n g 而修改系统的很多部分。此外,随着时间的流逝,由于使用方 重庆大学硕士学位论文2 面向方面的软件开发技术 式的变化,可能还会产生新的瓶颈。“类库设计师”的任务更困难,因为他很难设 想出所有对“类库”的使用方式。总而言之,设计师很难顾及到系统可能需要处 理的所有关注点。即使是在已经知道了需求的前提下,某些建立系统时需要的细 节也可能不能全部得到,整体设计就面i 临着设计不足,过分设计的两难局面。 2 3 面向方面的开发技术 因为这些问题的出现,研究人员已经尝试了多种方法来实现这个任务,这些 方法有一个共同的主题:分离关注点。a o 是这些方法中的一种,它的目的是清晰 的分离关注点来解决以上提到的问题。 2 3 1 方面的分类 a o ,从其本质上讲,使你可以用一种松散耦合的方式来实现独立的关注点, 然后组合这些实现来建立最终系统、用它所建立的系统是使用松散偶合的,模块 化实现的横切关注点来搭建的、与之对照用o o 建立的系统则是用松散耦合的模块 化实现的一般关注点来实现的。在a o 中,这些模块化单元叫“方面( a s p e c t ) ”, 而在0 0 中,这些一般关注点的实现单元叫做类。在a 0 中,我们可以从以下两个 角度对方面进行分类。: 1 语法角度的分类 垂直横切的方面:垂直横切的方面的与基准对象没有任何预定义的协议。因 此,基准对象不需要任何关于方面的信息,可以独立于方面进行开发。输入检验, 日志纪录,事务处理,显示调试信息等方面都可以归属于该类。 非垂直横切的方面:非垂直横切的方面需要与基准对象有一个预定义的协议。 因此,基准对象需要了解方面的一些信息,并且作好相关的准备以便方面对其调 用。当对基准对象要使用非垂直横切的方面时,开发者要考虑与方面的规则,并 按要求实现相应的操作。使用s s l ,以及状态会话b e a n 时,都需要考虑到这些因 素。非垂直横切的方面常常用来表述高级、复杂的方面。当然为了获得更好的移 植性和重用性,最好尽可能的采用垂直横切的方面。 2 语义角度的分类 基本方面:基本方面就是不会对基准对象产生任何副作用的方面。我们希望 对一个基本方面的调用结果不会对下一个基本方面的调用产生任何影响。因此, 基本方面可以处于方面调用序列的任何位置。基准方面的特性一般是不影响基准 对象的执行流程,不修改基本对象中的数据。在图形界面上显示数据,日志纪录, 以及其他许多垂直横切方面都是基本方面。 非基本方面:非基本方面是当执行方面的操作后,对基准对象可能有副作用 9 重庆大学硕士学位论文2 面向方面的软件开发技术 的方面。同步和事务处理都属于非基本方面。他们提供了原子执行单元,因此在 其中插入其他方面就有可能引发不被期望的结果。 2 3 2 面向方面的开发步骤 a o 包括三个清晰的开发步骤: 方面分解:分解需求撮出横切关注点。在这一步里,把核心模块级关注点 和系统级的横切关注点分离开来。就前面所提到的信用卡例子而言,可以 分解出三个关注点:核心的信用卡处理、日志和验证。 关注点实现:各自独立的实现这些关注点。 方面的重新组合:在这一步里,方面集成器通过创建一个模块单元( 方面) 来指定重组的规则,重组过程( 也叫织入( w e a v i n g ) 或结合 ( i n t e g r a t i n g ) ) 则使用这些信息来建构最终的系统。 a o 与0 0 最重要的不同在于它处理横切关注点的方式。在a o 中每个关注点的 实现都不知道其它关注点是否会“关注”它,如信用卡处理模块并不知道其它的 关注点实现正在为它做日志和验证操作。它展示了一个从0 0 转化来的强大的开发 范型。 一个a o 实现可以借助其它编程范型作为它的基础,从而原封不动的保留其基 础范型的优点。例如,a o 可以选择o o 作为它的基础范型,从而把o o 善于处理一 股关注点的好处直接带过来。用这样一种实现,独立的一般关注点可以使用o o p 技术、这就像过程型语言是许多o o 语言的基础一样。 2 4a 0 语言介绍 就像其他编程范型的实现一样,a o 的实现由两部分组成:语言规范和实现。 语言规范描述了语言的基础单元和语法:语言实现则按照语言规范来验证代码的 正确性,并把代码转成目标机器可执行的形式。 2 4 1 a o p 语言规范 从抽象的角度看来一种a o 语言要说明下面两个方面: 关注点的实现:把每个需求映射为代码,然后,编译器把它翻译成可执行 代码。由于关注点的实现以指定过程的形式出现,你可以使用传统语言如 c 、c + + 、j a v a 等。 重组规则规范:怎样把独立实现的关注点组合起来形成最终系统呢? 为了 这个目的需要建立一种语言来指定组合不同的实现单元,以形成最终系 统的规则。这种指定织入规则的语言可以是实现语言的扩展,也可以是一 1 0 重庆大学硕士学位论文2 面向方面的软件开发技术 种完全不同的语言。 2 4 2a o 语言的实现 a o p 的编译器执行两步操作: 组装关注点 组装结果转成可执行代码 a o 实现可以用多种方式实现重组,包括源码到源码的转换、它预处理每个方 面的源码,产生重组过的源码,然后把重组过的源码交给基础语言的编译器,产 生最终可执行代码。比如:使用这种方式,一个基于j a v a 的a o 实现可以先把不 同的方面转化成j a v a 源代码,然后让j a v a 编译器把它转化成字节码。( a s p e c t j 即如此) 也可以直接在字节码级别执行织入:毕竟字节码本身也是一种源码。此 外,底层的执行系统j a v a 虚拟机也可以设计为支持a 0 的。基于j a v a 的 a o 实现如果使用这种方式的话,虚拟机可以先装入重组规则,然后对后来装入的 类都应用这种规则、也就是说,它可以执行j u s t i n t i m e 的方面重组。 2 4 3a o 语言的优点 a o 除了可帮助我们解决上面提到的代码混乱和代码分散所带来的问题外,还 有一些其他优点: 模块化横切关注点:a o p 用最小的耦合处理每个关注点,使得即使是横切 关注点也是模块化的。这样的实现产生的系统,其代码的冗余小。模块 化的实现还使得系统容易理解和维护。 系统容易扩展:由于方面模块根本不知道横切关注点,所以很容易通过 建立新的方面加入新的功能。另外,当你往系统中加入新的模块时,已 有的方面自动横切进来,使系统易于扩展。 设计决定的迟绑定:使用a o 设计师可以推迟为将来的需求作决定,因为 他可以把这种需求作为独立的方面很容易地实现。 更好的代码重用性:a o 把每个方面实现为独立的模块,模块之间是松散 耦合的举例来说,你可以用另外一个独立的日志写入器方面来替换当 前的,用于把日志写入数据库,以满足不同的日志写入要求。松散藕合 的实现通常意味着更好的代码重用性,a o 在使系统实现松散出合这一点 上比0 0 做得更好。 2 5 a s p e c t j 介绍 a s d e c t j 是一个可免费获得的、由施乐公司帕洛阿尔托研究中一已, ( x e r o xp a r c ) 重庆大学硕士学位论文 2 面向方面的软件开发技术 开发的、j a v a 的a o p 实现“。它使用j a v a 作为单个关注点的实现语言,并扩展 j a v a 以指定重组规则。 a s p e c t j 的织入器( a s p e c t j 的编译器) 负责把不同的方面组合在一起,由于 a s p e c t 7 编译器建立的最终系统是j a v a 字节码,因此,它可以运行在任何符合j a v a 标准的虚拟机上。 而且,a s p e c t j 还提供了一些工具。a s p e c t j 的开发工具由一系列的命令行和 图形界面工具组成。并提供在线的帮助文档。 命令行工具包括: 一个a s p e c t j 语言的编译器( a j c ) 一个针对a j c 合成的j a v a 类文件的调试器( a j d b ) 一个用于产生h t m l 格式的横切点结构文档的文档产生器( a j d o c ) 图形界面工具包括: 用于浏览横切点结构并可调用a j c 进行编译的a s p e c t j 浏览器 支持j b u i i d e r 和f o r t ea n de n v i r o n m e n ts u p p o r tf o rg n ue m a c s x e m a c s 的a s p e c t j 开发环境( a j d e ) 其中的每一种工具都是作为j a v a b a s e dg u ii n s t a l l e r 白解压的来发布的。 安装程序通过调用”j a v a j a ra s p e c t j - t o o t 量j a r ”命令来激活。而a s p e c t j 的编译过程则是将源代码( c l a s s 和a p e c t ) 先重组到一起形成中间文件,然后再 有j a v a 编译器对其编译形成最终的可执行文件。如下图所示 纯i v 编译过程含璃 a s p e c t j 的编译过程 e k e c u t a b l e 图2 5 方面的编译过程 f i 薛5t h ep r o c e s so f a s p e c t sc o m p i l e a s p e c t j 是一种有严格语法的a o 语言。它定义了一系列语言结构,包括:连接 点,切入点,通知,引入和方面其中切入点和通知可以动态的影响程序流。 另外,a s p e c t j 允许以多种方式用方面和类建立新的方面,你可以引入新的数 据成员和方法或是声明一个新的类来继承和实现另外的类或接口。 重庆大学硕士学位论文 2 面向方面的软件开发技术 2 5 1 连接点 连接点是程序执行过程中明确定义的可插入代码的点。a s p e c t j 定义了几种 不同的连接点类型: 方法构造器的调用连接点 方法构造器的执行连接点 属性的读写访问 异常处理的执行 对象和类得初始化执行 a s p e c t t 中没有提供在如i f 条件检查或f o r 循环这样细粒度语言构造上的连接 点,下图是连接点的详解。 图2 6 连接点图解 f i 9 2 6i l l u s t r a t i o no fj o i n tp o i n t 2 5 2 切入点 切入点通过设置规则进行过滤,以此从所有的连接点中选择特定的切入点集。 过滤规则可以是具体的函数名或有通配符的函数等,下图是切入点的详解。 图2 7 切入点图解 f i 9 2 7i l l u s t r a t i o no fc u t t i n gp o i n t 重庆大学硕士学位论文2 面向方面的软件开发技术 2 ,5 3 通知 通知的定义需要用到上述切入点的概念。在a s p e c t j ,通知就是被用作定义额 外的代码将执行以在切入点所定义的连接点处。a s p e c t j 有如下的通知类型: b e f o r e :代码将在连接点的前面执行 a f t e r :代码将在连接点的前面执行 a r o u n d :包在连接点的外面,并有权决定是否运行此连接点。 图2 8 通知图解 f i 9 2 8i l l u s t r a t i o no fa d v i c e 2 5 4 引入 在a s p e c t j 6 7 引入就是增加新的类成员因此可以改变类之间的继承关系与通 知不同的是,引入是通过静态的方式来影响程序的流程,下图是引入的详解。 图2 9 引入图解 f i 9 2 9ill u s t r a ti o no fi n t r o d u n c e 1 4 重庆大学硕士学位论文2 面向方面的软件开发技术 2 5 5 方面 方面是a s p e c t j 中的模块单元,其地位就象是j a v 8 里的类。它把切入点和通知 包在一起。和类相似,方面也可以拥有方法和属性,从其它类或方面扩展以及实 现接口,但是不能n e w 来建立一个方面实例,下图是方面的详解。 图2 1 0 方面图解 f i 9 2 1 0i l l u s t r a t i o no fa s p e c t 2 6j a s c o 介绍 不同于a s p e c t j ,j a s c o 是一种动态织入方式的面向方面的语言。它的体系结 构如下,它主要由方面组件( a s p e c tb e a n ) 、连接器注册器( c o n n e c t o rr e g i s t r y ) 、 连接器( c o n n e c t o r ) 、和钩子( h o o k ) 四个部分组成。下面先分别介绍系统的各个部 分,然后再介绍系统的工作原理。 方面组件:是对j a v a 组件的扩展。如果要使用j a s c o 语言,首先就是将原j a v a 组件通过j a s c o 的一个工具进行扩展,在其每个函数的之前加入断点。 钩子:相当于a s p e c t j 中的方面,但是它只实现该方面实现的功能,并不指 定与组件的结合关系。 连接器:根据一定策略组合的方面。 连接器注册器:用于在方面组件上注册连接器。 重庆大学硕士学位论文2 面向方面的软件开发技术 。 图2 i 1j a s c o 的体系结构 f i 9 2 1 1j a s c oa r c h i t e c t u r e 2 7 本章小结 本章首先介绍了软件开发演进的历程和推动力,然后详细的分析了现阶段的 主流开发方法( 面向对象方法) 及在对软件的非功能需求不能良好解决的成因。 接着详细介绍了一种新的软件开发技术一一面向方面一一原理,相关概念。并通 过对比指出二者的优劣。并指出由于软件安全特性的特点( 分散性) 和a o 的特点, 可以利用a o 解决软件开发中的安全需求的问题。最后概述了两种基于j a v a 语言 但是不同机制的a o 语言a s p e c t j 和j a s c o ,其中对a s p e c t j 的实现机制、相关语 法概念和使用方法进行了详细介绍,而j a s c o 则只是进行了概要的描述。 1 6 重庆大学硕士学位论文 3j a v a 中的软件安全特性 3 j a v a 中的软件安全特性 j a v a 从最初的在互联网浏览器中运行的a p p l e t ( 小程序) 发展到现今应用 到各种领域的主流编程语言,在最近几年内经历了巨大的变化。它之所以获得如 此巨大的成功,其中一个相当关键的因素就是它提供了强大的安全特性支持。从 j a v a 技术提供者的角度来看,j a v a 的安全性包括以下两个方面: j a v a 语言平台( 主要通过j d k 实现) 是一个安全、现成的平台,在平台上 可以以一种安全的方式实现基于j a v a 的功能。 j a v a 所实现的安全工具和服务使得一些领域( 如企业) 对安全性广泛的需 求得以满足。 3 17j 2 s e ( j a v a2p i a t f o r ms t a n d a r de d i t t i o n ) 的安全特性 3 1 1 j a v a 语言平台 j a v a ,做为一种面向对象的语言,可以用来以与用c 和c + + 来提高程序员生 产效率几乎相同的方式开发应用程序。与其它很多编程语言相比较,j a v a 提供了 标准的一组库,包括范围广泛的通信和安全功能,因此简化了客户机服务器以 及分布式系统应用程序的构造和部署 i ”。当代码被装入到j 运行时环境时,它 还提供了数据类型安全,并且完成字节码验证。这捕获了由编程错误产生的错误, 尤其是由指针算法和数组越界索引的错误。 除此以外,j a v a 编程语言和运行时环境的一些功能,包括自动的内存管理和 强大的数据类型安全,使编写安全的代码更容易。 l 、编译时的强类型检查 测试范围从验证代码段格式是否正确到使代码段通过一个简单的定理校准以 使代码满足某种规则。般来说,核查代码是为了满足以下几点: 代码不能假造指针。 代码不能违反访问许可权。例如,外部对象不能访问私有域。 代码严格按照规则访问对象( 如测试保证i n p u t s t r e a m 对象只能用做 i n p u t s t r e a m 类,而不能用于其他) 。 代码调用有正确类型的参数的方法,并且没有堆栈溢出。 不能做非法的数据转换,如把整数类型转换为指针类型。 从严格意义上讲,对于保证类型安全,静态字节码验证器并不总是必须的,这 是因为j 在理论上可以在运行期间进行彻底的类型核查。然而,运行期间的核查 往往会显著降低程序执行速度,这是由于这类核查不得不重复进行,因此把些 重庆大学硕士学位论文 3j a v a 中的软件安全特性 核查提前到类加载时间去做,这样这些核查可以只进行一次,这似乎是一种有吸 引力的策略。任何下载的代码都满足这些性质,由于运行系统不必核查代码,这 样运行速度可以更快。由于验证器独立于j a v a 语言或编译器,因此它也可以核查 有非j a v a 源语言派生的字节代码。 2 运行时的字节码验证( b y t e c o d ev e r i f i e f ) 字节码验证确保所下载的代码被恰当地格式化,字节码( “j a v a 虚拟机”指 令) 没有违反这种语言或虚拟机的安全限制( 无非法数据转换) ,没有执行指针 寻址,内部堆栈不能溢出或下溢,以及字节码指令将拥有正确
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农行考试题及答案
- 尼尔斯考试题及答案
- 爱情考试题及答案
- 曾国藩考试题及答案
- 中华传统文化(山西管理职业学院)知到智慧树答案
- 司法制度和法律职业道德试题与答案
- 2025年智慧社区电气安装工程服务协议
- 2025版食堂员工培训及福利保障合同范本
- 2025版桁架租赁及临时仓储服务合同
- 2025年抖音网红直播广告合作合同样本
- 人教版PEP四年级英语上册全册课件
- 数据治理与数据中台建设方案
- 全册(教案)人教精通版英语六年级上册
- DL-T5455-2012火力发电厂热工电源及气源系统设计技术规程
- 穴位贴敷治疗过敏性鼻炎技术
- 公司自行车管理制度
- 《剧院魅影:25周年纪念演出》完整中英文对照剧本
- 蒋诗萌小品《谁杀死了周日》台词完整版
- 6G网络中的垂直通信和切片技术
- 社区健康服务与管理教案
- 《社区康复》课件-第一章 总论
评论
0/150
提交评论