(计算机科学与技术专业论文)基于j2ee的用户安全管理系统.pdf_第1页
(计算机科学与技术专业论文)基于j2ee的用户安全管理系统.pdf_第2页
(计算机科学与技术专业论文)基于j2ee的用户安全管理系统.pdf_第3页
(计算机科学与技术专业论文)基于j2ee的用户安全管理系统.pdf_第4页
(计算机科学与技术专业论文)基于j2ee的用户安全管理系统.pdf_第5页
已阅读5页,还剩80页未读 继续免费阅读

(计算机科学与技术专业论文)基于j2ee的用户安全管理系统.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

v8 五6 8 6 盥 基于j 2 e e 的用户安全管理系统 计算机科学与技术专业 研究生卓晓波指导教师唐宁九教授姜建敏副教授 摘要:j 2 e e 因其可伸缩性、灵活性、易维护性和安全性受到越来越多的 是注。在j 2 e e 中,与角色相关的访问权限是通过配置文件( w e b x m l 和 j b - j a r x m l ) 由容器自动实现的,而与角色相关的用户系统则可以采取基于 f 【据库或l d a p ( i i g h t w e i 曲td i r e c t o r ya c c e s sp r o t o c 0 1 ) 等技术的数据系统由具 本应用系统的开发者来实现。 本文主要讨论利用j 2 e e 容器的安全框架来实现应用系统的安全管理功 峨本文以角色为纽带,深入探讨用j 2 e e 容器实现与角色相关的访问权限 空制和以代码设计编程实现基于数据库的用户管理系统。从用户资料管理、 叉限的验证和授权、可控制资源的限制和访问等方面介绍如何应用j 2 e e 提 共的安全服务。 关键词:j 2 e e 安全验证授权j a a sj m s 容器框架 t h eu s e rs e c u r i t ym a n a g e r m e n ts y s t e mb a s e do nj 2 e e m a j o rc o m p u t e rs c i e n c e & t e c h n o l o g y p o s t g r a d u a t e :z h u ox i a o b os u p e r v i s e r :p r o f t a n gn i n g j i u a b s t r a c t :j 2 e eh a sa t t r a c t e dm o r ea n dm o r ea t t e n t i o n sf o ri t sf l e x i b i l i t y , m a i n t e n a b i l i t ya n ds e c u r i t y i nj 2 e e ,t h ec o n t a i n e rc 0 0p e r f o r mt h ea c c e s sr i g h t r e l a t i o nt ot h er o l eb yc o n f i g e rf i l er w e b x m la n de j b - j a r x m l ) t h e a p p l i c a t i o n d e v e l o p e rm u s tf i n i s ht h eu s e r sa p p l i c a t i o nc o d er e l m i o nt ot h er o l eb yt h e d a t a b a s es y s t e mb a s e do nt h ed a t a b a s eo rl d a p ( l i g h t w e i g h td i r e c t o r ya c c e s s p r o t o c a l ) , t h ep a p e ri n t r o d u c et h ea p p l i c a t i o no fs e c u r i t ym a n a g e r m e n tv i as e c u r i t y f r a m et oj 2 e ea n da n a l y s e sd e e p l yh o wt h ej 2 e ec o n t a i n e rp e r f o r mt h ea c c e s s c o n t r o lb a s e do nt h er o l ea n dh o wt h ep r o g r a m m i n gc o d e sf i n i s ht h eu s e r m a n a g e rs y s t e mb a s e do nt h ed a t a b a s e i naw o r d ,t h ep a p e ri n t r o d u c et h a th o wt oa p p l ys e c u f i t ys e r v i c ep r o v i d e d b yj 2 e ef r o mt h eu s e ri n f o r m a t i o nm a n a g e l t h ea u t h e n t i c a t i o na n da u t h o r i z a t i o n t or i g h t sa n dr e s t r a i n a b i l i t yo fa c c e s sc o n t r o ls o u r c e k e y w o r d s :j 2 e es e c u r i t y a u t h e n t i c a t i o na t h o r i z a t i o nj a a sj m s c o n t a i n e rf r a m e w o r k 2 列川大学工程硕士学位论文 1 、前言 在很多实际应用中不只是简单地要求用户需要注册登录,还要求不同 的用户对不同资源捅奄不同的权限。铡如,菜单位的新闻部门韵某些人才拥 有对外发布新闻的权限;每个部门只有对自己部门内部资源才拥有创建、修 改权限,对于其他部门创建的资源如潮页等只有浏览的权限。这些复杂的用 户权限验证需要可以总结为如下几点: 用户资料管理系统:对用户的注册资料进行管理。可进行用户资料的 新增修改,能够查询获取丢失的密码。 权限的验证和授权:拦截所有访问受保护资源的请求,检套该闫户是 否被授权访问该资源。 。可控制的资源限制访闻:对于系统的资源,无论是数据或行为动作, 对确定的一组用户都有访问限制。例如对于有的用户只允许读操作,刁;能进 行写操作:有些资源只有创建者才可以访问和操作等。 这3 种需求适合大部分应用系统,通过它们的实现,可以形成一个用户 安全管理方蕊的组件框架,并能够重复地在不同的应阁系统中使用。 2 、j 2 e e 安全体系架构基本知识 现在越来越多的企业应用构建在j 2 e e 平台上,这得益于j 2 e e 为企业 虚用的开发提供了良好的框架和服务的支持,j 2 e e 为企业应用提供了多方 覆的服务( s e c 雠i 锨t r 懿s 娥o n ,n a m i n g 等) 。j 2 e e 平台作为中间层提供了应 用程序所必须的环境,为多层应用程序提供了”一处编写,处处使用”的霹移植 性以及可缩放性,也降低了建立多层应用程序的复杂程序。 程蚓大攀工疆颈圭学链论文 2 1 j 2 e e 的安全机制 j 2 e e 体系结褐魏墨1 所示。j 2 e e 俸系缩构雹耩弱缀 毪有:j 2 e e 服务 器、e j b 容器和w e b 容器,j 2 e e 服务器除了提供e j b 和w e b 容器,还提供 了如j n d i 、j d b c 、j a a s 、踟一p 、e j b 等服务: j 2 e e 应用服务器 慨b 包容器 释幕数据库? i 刘觜璺曼 | j s plt 蜘e ti i 标罅i 幽觥 譬釜 - h t t p i攀童 兰 l i 苦 啪 刖il l 骞录鞭务器 n 三鬟 l 弹辩l 爱爵l 莲 墨 = 愆= o ll h t m l 砸谢j il 口b包容器r州 l j m 应嘲雄弗 毒。v z 0 p 会话e j b实体e j b 糟息驱动e j b o ) c o r b a 服务器 疵瑁端口狴序k : 、。一 。 麓 茧 - 暮b = 冀 l 清息酞碰 器 摹 蚤 殳 墨 王 墨 器 鼋 巴 一 匿1j 2 e e 的体系绩极 其中,客户藕黼可戳是基予w e b 方式翡动态两页,恣可黻是基 :倦统方 式的a p p l i c a t i o n 模式。 在j 2 e e 臻竣中,组件的安全是由瞧假备自鲍容器来负责的,组伟鲍开 发人员几乎可戬不用或者缀少在锤终中添搬舂关安全熬代弱。这静安全逻辑 和业务逻辑相对独立的架构,使得企业级应用系统有更好的灵活性和扩展 性。j 2 e e 产品遇常为应用程序开发者提供两矜形式的基予容器酶安全絮构; 说鹳性豹安全往霸研编程豹安垒性。 霸埘文学工程硕士学绽论文 说明性的安全性通过安全结构描述的方式来代表应月i ;| 程序的安全需求, 安全结构一般包括安全角色,访问控制和验证要求等。在j 2 e e 平台中都署 描述符充当了说明的安全性的主要工具。部署描述符是组件开发者帮应瘸程 序部署者或应用襁序组装者之间的交流工具。应用程序的开发者用他袭示应 用中的安全需求,应用程序部署誊或应用程序组装者将安全惫色与部署环境 中的用户和锺璇射起来。在程序运行对容器从部署拯述符中提取出稿应的安 全策略,然后容器根据安全策略执行安全验证。说明的安全性不需要开发人 员编写任何安全相关的代码,一切都是通过配置部署描述符来完成的。 可编程静安全性在说明性静安全性鲍基臻上,镬安全敏感的应用可默逶 过调用容器提供的a pi 来对安全做出决断。这在说明性的安全性不足以满 足企业的安全模型的情况是非港毒震的。j 2 e e 在e j be i b c o n e x ti n t e r f a c e 郭 s e r v l e ti - i tt p s e r v l e t r e q u e s ti n t e r f a c e 中套提供2 个方法: 1 i s c a l l e r l n r o l e ( e j b c o n t e x t ) g e t c a l l e r p r i n c i p a l ( e j b c o n t e x t ) i s u s e r i m r o l e ( h t t p s e r v t e t r e q u e s t ) 。g e t u s e r p r i n c i p a l ( h u p s e r v l e t r e q u e s o 这些方法允许组件根据调用者或远程用户的安全角色柬做出商业判断。 为了访运j 2 e e 服务,用户需要窿j 2 e e 提供其身份,藤该梭壹过程称为 验 e ( a u t h e n t i c a f i o n ) 。用户通过某种方式向系统提交用户名和密码或者是用 户的数字证书等验证信息系统通过用户提供的验证信息和系统的安全策略 采验证塌户的身份,决定是否允诲用户访翊j 2 e e 服务,这一过程称为授权 ( a u t h o r i z a t i o n ) 。故j 2 e e 的安全机制主要依赖于他的用户验证机制和系统授 权机制来实现。j 2 e e 将其用户分为两个不间的域( r e a l m :是一个包含用户名, 密玛和用户角氢的数据库。) ,分别由证书验涯或是作为默认域,可以通过 r e a l m 工具实用程序对用户进行管理。大多数情况下,j 2 e e 服务使用默认域 来验证用户。 在j 2 e e 枣现以蘸,为了实现一个完整弱用户安全管理框架,大部分是 由应用系统本身实现。因此,很多有经验的软件商都拥有自己成熟的用户安 3 嚣川太学工程磺学垃论文 全管理系统,但是缺点也比较明显自己设计的用户安全管理系统可燮用 性低,有的和具体斑月程序过分紧密的绑定在一起,无法移棱到其他系统上。 髓着业务量上升,应用系统豹不断增鸯霸,会出现不同应用系统拥有不同 韵用户登录验证体系,很显然,这给用户访问带来了不方便,用户不可能为 每个系统注册一套用户和密码,定熹5 一套用户惫色。因此,整个服务器群中 需要绞一黔用户权鞭验证体系。蕊j 2 e e 容器的用户安全管理框絮再辅劲黻 l d a p ( 1 i g h t w e i g h td i r e c t o r ya c c e s sp r o t o c 0 1 ) 或数据库系统,即可很方便地达到 这个匪标。 2 2 访问控制 根据应用背豢的不固,谤阀控靠4 可以有不固的实现策略。二十世纪七十 年代以来,如下三种访闻控翻策略被蔽次提如,在现有豹访阔控剜产品中应 用较广。它们分别是:自主访问控制,强制访问控制,基于角色的访问控制。 2 。2 。1 自主访阏控制 自主访问控制( d i s c r e t i o n a r y a c c e s s c o n t r 0 1 ) 是根据访问者和( 或) 它 骺蕊缀浆身份来控京对客体露标浆授权访闽。一个对客体具有鑫主性访闷权 狠的主体能够把该客体信息共亭绘其他的主体。u n i x 安全模型类似予d a c 模型,文件的所有者通过设置文件许可权决定谁有权以何种方式对其进行访 闻。围绕d a c 模型中瞧投限转交、所有权变更、权限级联吊销等闻题,d a c 模型有很多种形式。由于主体访阀者对访问的控制有一定权利,信息在移动 过程中其访问权限关系会被改变,如用户a 可以将其对客体目标的访问权限 传递给用户b ,跌弼使不其各对访闯权疆的b 也可鼓访问。自主访闻控削模型 的优点是其有相当的灵话性。客体豹翩建者翼洧对该窖体的所有访问许可并 且可以授权其他主体,这比较符合人们对权限的基本认识。但是访问许可的 转移报容易产生安全漏漏,使褥客俸的所有者最终都不能控裔对该客体的搿 有访问许可。所以综合说来,自主访问控制的安全级别较低。 d 四川大学工程碰十学位诧立 全管理系统,但是缺点也比较明显自己设计的用户安全管理系统可重用 性低,有的和具体应用程序过分紧密的绑定在一起,无法移植到其他系统上。 随着业务量上升,应刖系统的不断增加,会出现不同应用系统拥有不同 的用户登最验证体系,很显然,这给用户访问带来了不方便,用户不可能为 每个系统注册一套用户和密码,定制一套用户角色。因此,整个服务器群中 需要统一的用户权限验证体系。而j 2 e e 容器的用户安全管理框架再辅助以 l d a p ( i i g h t w e i 曲td i r e c t o r ya c c e s sp r o t o c 0 1 ) 或数据库系统,即可很方便地达到 这个目标。 2 2 访问控制 根据应用背景的不同,访问控制可以有不同的实现策略。二十世纪七十 年代以来,如下三种访问控制策略被依次提出,在现有的访问控制产品中应 用较广。它们分别是:自主访问控制,强制访问控制,基于角色的访问控制。 2 2 1 自主访问控制 自主访问控制( d i s c r e t i o n a r y a c c e s s c o n t r 0 1 ) 是根据访问者和( 或) 它 所属组的身份来控制对客体目标的授权访问。一个对客体具有自主性访问权 限的主体能够把泼客体信息共享给其他的主体。u n i x 安全模型类似于d a c 模型,文件的所有者通过设置文件许可权决定谁有权咀何种方式对其进行访 问。围绕d a c 模型中的权限转交、所有权变更、权限级联吊销等问题,d a c 模型有很多种形式。由于主体访问者对访问的控制有一定权利信息在移动 过程中其访问权限关系会被改变,如用户a 可以将其对客体目标的访问权限 传递给用户b ,从而使不具备对访问权限的b 也可以访问。自主访问控制模型 的优点是具有相当的灵活性。客体的创建者具有对该客体的所有访问许可并 且可以授权其他主体这比较符合人们对权限的基本认识。但是访问许可的 转移很容易产生安全漏洞,使得客体的所有者最终都不能控制对该客体的所 有访问许可。所以综合说来,自主访问控制的安全级别较低。 有访问许可。所以综合说来,自主访问控制的安全级别较低。 4 四川大学工程硕士学位论文 2 2 2 强制访问控制 强制访问控制( m a n d a t o r ya c c e s sc o n t r 0 1 ) 又称为基于格的访问控制 l b a c ( l a t t i c e b a s e da c c e s sc o n t r 0 1 ) ,是基于主体和客体的安全标记来实 现的一种访问控制策略。系统中的每个主体被分配到不同的具有安全调查权 限的域中,而系统中的每一个客体属于一个安全级别,这样的等级形成一个 具有支配关系的框架,比如可以分为绝密级、机密极、秘密级、无密级等。 强制性访问控制策略是体现在客体安全级别的敏感性上,而不是主体的行为 属性。主体可以访问一个文件,但是因为文件具有它自己的安全级别,所以 在具体的应用环境中,我们可以实现满足多种安全级别需要的m a c 安全模 型。在m a c 模型中,只有当两个实体处在同一级别上时,才可以进行双向通 信或通过被信任中间体进行通信,这样就可以利用上读下写来保证数据完整 性,利用下读上写来保证数据的保密性,并且通过这种梯度安全标签实现信 息的单向流通。强制访问控制的优点是管理集中,根据事先定义好的安全级 别实现严格的权限管理,因此适宜于对安全性要求较高的应用环境。美国军 方就一直使用这种访问控制模型。但这种强制访问控制太严格,实现工作量 太大,管理不便,不适用于主体或客体经常更新的应用环境。 2 2 3 基于角色的访问控制 前面两种访问控制模型都存在的不足是将主体和客体直接绑定在一起, 授权时需要对每对( 主体,客体) 指定访问许可。这样存在的问题是当主体 和客体达到较高的数量级之后,授权工作将非常困难。二十世纪九十年代以 来,随着对在线的多用户、多系统的研究不断深入,角色的概念逐渐形成, 并逐步产生了以角色为中心的访问控制模型( r o l e b a s e da c c e s sc o n t r 0 1 ) 。 在r b a c 模型中,角色是实现访问控制策略的基本语义实体。系统管理员可 以根据职能或机构的需求策略来创建角色、给角色分配权限和给用户分配角 色等。基于角色访问控制的核心思想是将权限同角色关联起来,而用户的授 四川大学工程硕士学位论文 权则通过赋予相应的角色来完成,用户所能访问的权限就由该用户所拥有的 所有角色的权限集合的并集决定。角色之间可以有继承、限制等逻辑关系, 并通过这些关系影响用户和权限的实际对应。在实际应用中,根据事业机构 牛不同工作的职能可以创建不同的角色,每个角色代表一个独立的访问权限 实体。然后在建立了这些角色的基础上根据用户的职能分配相应的角色,这 样用户的访问权限就通过被授予角色的权限来体现。在用户机构或权限发生 变动时,可以很灵活的将该用户从一个角色移到另一个角色来实现权限的协 调转换,降低了管理的复杂度,而且这些操作对用户完全透明。另外在组织 机构发生职能性改变时,应用系统只需要对角色进行重新授权或取消某些权 限,就可以使系统重新适应需要。这些都使得基于角色访问控制策略的管理 和访问方式具有无可比拟的灵活性和易操作性。基于角色的访问控制模型是 一个策略中立的模型,完全独立于其他安全手段。由于引入角色的概念,最 小权限原则得以实现,系统高度灵活并且低冗余。根据不同的应用需要可以 实现不同级别的r b a c 模型,并且可以实现多管理员协同管理。这些特点都 进一步推动了r b a c 模型的理论和应用研究。目前基于r b a c 的实际系统 已经逐步出现,并以飞快的速度递增。二十一世纪初,一个统一的r b a c 模 型框架被提出并即将成为标准,基于角色的访问控制模型正逐步被理论界和 工业界所接受。 j 2 e e 容器的用户安全框架是基于r b a c ( r o l e d b a s e d a c c e s sc o n t r o l ,相 关网址:h t t p :c s r c n i s g o v r b a c ) 设计模型建立的。角色可以是指做某些事 情的资格,比如医生或物理学家;也可以包含权力和责任的意思,如部门经 理或局长等。角色和组( g r o u p s ) 是有区别的:组就是纯粹代表一群用户;角 色一方面代表一系列用户,另外一方面可以代表一系列权限,因此可以说是 用户和权限的结合体。引入角色的概念主要是为了分离用户和访问权限的 直接联系。用户与访问权限的直接组合可能是短暂的,而角色则可以相对稳 定,因为一个系统中和角色相关的权限变化是有限的。基于角色的访问控 制系统可以分为两个部分:与角色相关的访问权限系统以及与角色相关的用 四川大学工程硕士学位论文 户管理系统。这样,通过角色这个中间者,将用户和权限联系在一起。其实 这也非常符合日常生活的逻辑,例如王三来到某公司做业务员,公司章程规 定了业务员一定的权限和职责,王三进入了业务员的角色,王三也就有了这 些权限和职责,但这些权限职责不是和王三本人有直接联系的,而是通过王 三的角色才会发生在王三身上:如果王三升迁作经理表示其进入经理这样 的角色,由此经理角色拥有的权限和职责王三又会拥有。 由于有了这样两个分离的系统,因此在具体应用上可以分别实现。在 j 2 e e 中,与角色相关的访问权限是通过配置文件( w e b x m l 和c j b - j a r x m l ) 由容器自动实现的,而且这种访问权限的配置也是非常方便灵活。而与角色 相关的用户系统则由具体应用系统的开发者来实现,可以采取基于数据库或 l d a p ( 1 i g h t w e i g h td i r e c t o r ya c c c s sp r o t o c 0 1 ) 等技术的数据系统来实现,例如用 户注册资料的新增和修改等。 本项目的设计思路就是完全按照这两种分离的思路实现的,将与角色相 关的访问权限系统交由j 2 e e 容器实现。因此,如何配置j 2 e e 将是本项目实 现中的一个主要部分。代码设计编程则主要集中在基于数据库的用户管理系 统上。 2 3j 2 e e 的j a a s j a v a a u t h e n t i c a t i o n a u t h o r i z a t i o ns e r v i c e ( j a a s ,j a v a 验证和授权a p i ) 提供 了灵活和可伸缩的机制来保证客户端或服务器端的j a v a 程序。j a v a 早期的安 全框架强调的是通过验证代码的来源和作者,保护用户避免受到攻击。j a a s 强调的是通过验证谁在运行代码以及他( 她) 的权限来保护系统免受用户的 攻击。它让你能够将一些标准的安全机制,例如s o l a r i s n i s ( 网络信息服务) 、 w i n d o w sn t 、l d a p ( 轻量目录存取协议) ,k e r b e r o s 等通过一种通用的, 可配置的方式集成到系统中。 四川大学工程硕士学位论文 2 3 1j a v a 验证和授权概论 在j a a s 出现以前,j a v a 的安全模型是为了满足跨平台的网络应用程序 的需要而设计的。在j a v a 早期版本中,j a v a 通常是作为远程代码被使用,例 如a p p l e t 。因此最初的安全模型把注意力放在通过验证代码的来源来保护用 户上。早期的j a v a 安全机制中包含的概念,如s e r c u h t y m a n a g e r ,沙箱概念, 代码签名,策略文件,多是为了保护用户。 j a a s 的出现反映了j a v a 的演变。传统的服务器客户端程序需要实现 登录和存取控制,j a a s 通过对运行程序的用户进行验证,从而达到保护系 统的目的。图2 给出了j a a s 的概览。应用程序层的代码只需要和 l o g i n c o n t e x t 打交道。在l o g i n c o n t e x t 之下是一组动态配置的l o g i n m o d u l e 对象,这些对象使用相关的安全基础结构进行验证操作。 目圈圈囤 图2j a a s 概览 j a a s 提供了一些l o g i n m o d u l e 的参考实现代码,比如 j n d i l o g i n m o d u l e 。开发人员也可以自己实现l o g i n m o d u l e 接口,就象在下面 的例子中的r d b m s l o n g i n m o d u l e ,j 2 e e 容器实现了与角色相关的访问权限 8 叫川大学工程硕士学位论文 功能,那么如何在自己的具体应用系统开发中使用j 2 e e 的安全系统呢? 2 3 2j a a s 的使用 开发人员可以将j a a s 应用到客户端和服务器端。目前在应用服务器市 场中的j a a s 产品还不是很一致,使用j a a s 的j 2 e e 应用服务器有一些细 微的差别。例如j b o s s s x 使用自己的结构,将j a a s 集成到了一个更大的安 全框架中:而虽然w e b l o g i c6 x 也使用了j a a s ,安全框架却完全不一样。 在使用j a a s 之前,你首先需要安装j a a s 。在j 2 s e1 4 中已经包括了j a a s , 但是在j 2 s e1 3 中没有。如果你希望使用j 2 s e1 _ 3 ,你可以从s u n 的官方 站点上下载j a a s 。当正确安装了j a a s 后,你会在安装目录的l i b 目录下找 到j a a s j a r 。你需要将该路径加入c l a s s p a t h 中。( 注:如果你安装了应用服务 器,其中就已经包括了j a a s ,请阅读应用服务器的帮助文档以获得更详细 的信息) 。 在应用程序中使用j a a s 验证通常会涉及到以下几个步骤: 1 创建一个l o g i n c o m e x t 的实例。 2 为了能够获得和处理验证信息,将一个c a l l b a c k h a n d l e r 对象作为参 数传送给l o g i n c o n t e x t 。 3 通过调用l o g i n c o n t e x t 的l o g i n 0 方法来进行验证。 4 通过使用l o g i n o 方法返回的s u b j e c t 对象实现一些特殊的功能( 假设 登录成功) 。 下面是一个简单的例子: l o g i n c o n t e x tl c = n e wl o g i n c o m e x t ( ”m y e x a m p l e ”) ; t r y ( i c i o g i n ( ) ;) c a t c h ( l o g j n e x c e p t i o n ) a u t h e n t i c a t i o nf a i l e d ) a u t h e n t i c a t i o ns u c c e s s f u l ,w ec a nn o wc o n t i n u e w ec a r lu s et h er e t u r n e ds u b j e c ti f w el i k e 9 到j i i 大学工程硕j :学位论文 s u b j e c ts u b l c g e t s u b j e c t 0 ; s u n e c td o a s ( s u b ,n e wm y p r i v i l e g e d a c t i o n 0 ) ; 在运行这段代码时,后台进行了以下的工作。 1 当初始化时,l o g i n c o n t e x t 对象首先在j a a s 配置文件中找到 m y e x a m p l e 项,然后根据该项的内容决定该加载哪个l o g i n m o d u l e 对象( 参 见图3 ) 。 2 在登录时,l o g i n c o n t e x t 对象调用每个l o g i n m o d u l e 对象的l o g i n ( ) 方法。 3 每个l o g i n 0 方法进行验证操作或获得一个c a l l b a c k h a n d l e 对象。 4 c a l l b a c k h a n d l e 对象通过使用一个或多个c a l l b a c k 方法同用户进行交 互,获褥用户输入。 5 向一个新的s u b j e c t 对象中填入验证信息。 我们将对代码作进一步的解释。但是在这之前,让我们先看代码中涉及 到的核心j a a s 类和接口。这些类可以被分为三晕中类型: 普通类型s u b j e c t ,p r i n c i p a l ,凭证 验证l o g i n c o n t e x t ,l o g i n m o d u l e ,c a l l b a c k h a n d l e r ,c a l l b a c k 授权p o l i c y ,a u t h p e r m i s s i o n ,p r i v a t e c r e d e n t i a l p e r m i s s i o n 上面列举的类和接1 2 1 大多数都在j a w s e c u r i t y a u t h 包中。在j 2 s e1 4 中, 还有一些接口的实现类在c o r n s l m s e e u r i t y a u t h 包中。 1 普通类型:s u b j e c t ,p r i n c i p a l ,凭证 s u b j e c t 类代表了一个验证实体,它可以是用户、管理员、w e b 服务,设 备或者其他的过程。该类包含了三种类型的安全倍息: 身份( i d e n t i t i e s ) :由一个或多个p r i n c i p a l 对象表示 公共凭证( p u b l i cc r e d e n t i a l s ) :例如名称绒公共秘钥 私有凭证( p r i v a t ec r e d e n t i a l s ) :例如口令或私有密钥 p r i n c i p a l 对象代表了s u 巧e c t 对象的身份。它们实现了 1 0 四川大学工程硕士学位论文 j a v a s e c u r i t y p r i n c i p a l 和j a v a i o s e r i a l i z a b l e 接口。在s u b j e c t 类中,最重要的 方法是g e t n a m e 0 。该方法返回一个身份名称。在s u b j e c t 对象中包含了多个 p r i n c i p a l 对象,因此它可以拥有多个名称。由于登录名称、身份证号和e m a i l 地址都可以作为用户的身份标识,可见拥有多个身份名称的情况在实际应用 中是非常普遍的情况。 在上面提到的凭证并不是一个特定的类或接口,它可以是任何对象。凭 证中可以包含任何特定安全系统需要的验证信息,例如标签( t i c k e t ) ,密钥 或口令。s u b j e c t 对象中维护着一组特定的私有和公有的凭证,这些凭证可以 通过g e t p r i v a t e c r e d e n t i a l s ( ) 和g e t p u b l i c c r e d e n t i a l s 0 方法获得。这些方法通常 在应用程序层中的安全子系统被调用。 2 验证:l o g i n c o n t e x t 在应用程序层中,你可以使用l o g i n c o n t e x t 对象来验证s u b j e c t 对象。 l o g i n c o n t e x t 对象同时体现了j a a s 的动态可插入性( d y n a m i cp l u g g a b i l i t y ) , 因为当你创建个l o g i n c o n t e x t 的实例时,你需要指定一个配置。 l o g i n c o n t e x t 通常从一个文本文件中加载配置信息,这些配置信息告诉 l o g i n c o n t e x t 对象在登录时使用哪一个l o g i n m o d u l e 对象。 下面列出了在l o g i n c o n t e x t 中经常使用的三个方法: l o g i n ( ) 进行登录操作。该方法激活了配置中制定的所有l o g i n m o d u l e 对象。如果成功,它将创建一个经过了验证的s u b j e c t 对象:否则抛出 l o g i n e x c e p t i o n 异常。 g e t s u b j e c t ( ) 返回经过验证的s u b j e c t 对象 l o g o u t ( ) 注销s u b j e c t 对象,删除与之相关的p r i n c i p a l 对象和凭证 3 验证:l o g i n m o d u l e l o g i n m o d u l e 是调用特定验证机制的接口。j 2 e e1 , 4 中包含了下面几种 l o g i n m o d u l e 的实现类: j n d i l o g i n m o d u l e 用于验证在j n d i 中配置的目录服务 k r b 5 l o g i n m o d u l e 使用k e r b e r o s 协议进行验证 四埘大学工程颈士学位论文 n t l o g i n m o d u l 使用当前用户在n t 中的用户信息进行验证 u n i x l o g i n m o d u l e 使用当前用户在u n i x 中的用户信息进行验证 癣上面这些模块绑定在起翡还骞对应鸵p r i n c i p a l 接口滟实现类,例妇 n t d o m a i n p r i n c i p a l 和u n i x p r i n c i p a l 。这些类在c o m s u n s e c u r i t y a u t h 包中。 l o g i n m o d u l e 接口中包含了五个方法: i n i t i a l i z e ( ) 当创建一个l o g i n m o d u l e 实铡辩会被构造函数调用 l o g i n ( ) 进行验证 c o m m i t ( ) 当l g o n i n c o n t e x t 对象接受所有l o g i n m o d u l e 对象传回的结果 后将调用该方法。该方法将p r i n c i p a l 对象耜凭证赋绘s u b j e c t 对象。 a b o r t o 当任何一个l o g i n m o d u l e 对象验 正失败时都会调用该方法。此时 没有任何p r i n c i p a l 对象或凭证关联到s u b j e c t 对象上。 l o g o u t ( ) 测除与s u b j e c t 对象关联的p r i n c i p a l 对象葶羹凭证。 在应用程序的代码中,程序员通常不会壹按调用上面列出的方法,而是 通过l i g o n c o n t e x t 问接调用这些方法。 4 。验证:c a l l b a c k h a n d t e r 帮c a l l b a c k c a l l b a c k h a n d l e r 和c a l l b a c k 对象可以使l o g i n m o d u l e 对象从系统和用户 那里收集必要的验证信息,同时独立于实际的收集信息时发生的交互过程。 j a a s 在j a v a x s e v u r i t y a u t h ,c a l l b a c k 包中包含了- 毫个c a l l b a c k 的实现类帮两个 c a l l b a c k h a n d l e r 的实现类:c h o i c e c a l l b a c k 、c o n f i r m a t i o n c a l l b a c k 、 l o g c a l e c a l l b a c k ,n a m e c a l l b a c k 、p a s s w o r d c a l l b a c k 、t e x t l n p u t c a l l b a c k , t e x t o u t p u t c a t l b a c k 、d i a l o g c a u b a c k h a n d l e r 和t e x t c a l l b a c k h a n d l e r 。c a l l b a c k 接口只会在客户端会被使用到。 5 配置文件 上面我已经提到,j a a s 的可扩展性来源于它能够进行动态配置,两配 置信息通常是保存在文本中。这魑文本文件有很多个配置块构成,我们通常 把这些配嚣块髂作申请( a p p l i c a t i o n ) 。每个申请对应了一个或多个特定的 l o g i n m o d u l e 聪象。当你的代码构造一个l o g i n c o n t e x t 对象时,你需要把配 1 2 刚川大学工程硕量学位论文 置文件中申请的名称传递给它。l o g i n c o n t e x t 将会根据申请中的信息决定激 活哪些l o g i n m o d u l e 对象,按照什么顺序激活以及使用什么规则激活。 配置文件的结构如下所示: a p p l i c a t i o n m o d u l e c l a s sf l a gm o d u l e o p t i o n s ; ) ; a p p l i c a t i o n m o d u l e c l a s sf l a gm o d u l e o p t i o n s ; 下面是一个名称为s a m p l e 的申请 s a m p t e ( c o r n s u n s e c u r i t y a u t h m o d u l e n t l o g i n m o d u l er q u i r e dd e b u g = t r u e ; 上面这个简单的申请指定了l o g i n c o n t e x t 对象应该使用n t l o g i n m o d u l e 进 行验证。类的名称在m o d u l e c l a s s 中被指定。f l a g 控制当申请中包含了多个 l o g i n m o d u l e 时进行登录时的行为;r e q u i r e d 、s u f f i c i e n t 、r e q u i s i t e 和o p t i o n a l 。 最常用的是r e q u i r e d ,使用它意味着对应的l o g i n m o d u l e 对象必须被调用, 并且必须需要通过所有的验证。由于f l a g 本身的复杂性,本文在这里不作深 究。 m o d u l e o p t i o n 允许有多个参数。例如你可以设定调试参数为t r u e ( d e b u g = t r u e ) ,这样诊断输出将被送到s y s t e m o u t 中。 配置文件可以被任意命名,并且可以被放在任何位置。j a a s 框架通过使用 j a v a s e c u r t y a u t h 1 0 n g c o n f i g 属性来确定配置文件的位置。例如当你的应用程 序是j a a s t e s t ,配置文件是当前目录下的j a a s c o n _ f i g ,你需要在命令行中输入: j a v a d j a v a s e c u r i t y a u t h 1 0 9 i n e o n f i g = j a s s c o n f i gj a v a t e s t 图3 描述了配置文件中各元素之间的关系 靼i t l 丈学工程硕士学位论文 图3j a a s 的配置文件 6 邋过命令孳亍方式进行登录验证 为了说明j a a s 到底能干什么,我在这里编写了两个例子。一个是简单 的由命令行输入调用的程序,另一个是服务器端的j s p 程序。这两个程序都 通过用户名,密码的方式进行登录,然后使用关系数据库对其进行验证。 为了通过数据库进彳亍验证,我们需要: ( 1 ) 实现r d b m s l o g i n m o d u l 类,该类可以对输入的信息进行验证。 ( 2 ) 编辑一个配置文件,告诉l o g i n c o n t e x t 如何使用r d b m s l o g i n m o d u l e 。 ( 3 ) 实现c o n s o l e c a l l b a c k h a n d l e r 类,通过该类可以获取用户的输入。 ( 4 ) 编写应用程序代码。 在r d b m s l o g i n m o d u t 类中,我们必须实壬嵬l o g i n m o d u l e 接口中的五个 方法。首先是i n i t i a l i z e ( ) 方法: p u b l i c v o i d i n i t i a l i z e ( s u b j e c ts u b j e c t ,c a l l b a c k h a n d l e ra l l b a c k h a n d l e r , m a p s h a r e d s t a t e ,m a po p t i o n s ) t h i s s u b j e c t = s u b j e c t ; t h i s c a l l b a c k h a n d l e r = c a u b a c k h a n d l e r ; t h i s s h a r e d s t a t e = s h a r e d s t a t e ; t h i s 。o p t i o n s2o p t i o n s ; u r l2 ( s t r i n g ) o p t i o n s g e t ( ”u r l ”) ; 四川大学工程硬士学位论文 d r i v e r c l a s s = ( s t r i n g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论