首页 > 编程 > .NET > 正文

MyCollege.Net系统规划与总体设计

2024-07-10 12:59:15
字体:
来源:转载
供稿:网友

目 录



一、前言…………………………………………………………………………………1

二、问题定义……………………………………………………………………………1

三、设计目标.…..………………………………………………………………………2

四、设计任务……………………………………………………………………………2

五、可行性可分析………………………………………………………………………3

六、总体设计……………………………………………………………………………5

七、mycollege.net中子系统的体系结构………………………………………………7

八、mycollege.net所倡导的应用系统开发流程………………………………………9

九、mycollege.net中的身份认证与权限控制策略……………………………………11

十、mycollege.net中公共数据资源数据访问策略……………………………………11

十一、统一身份认证子系统中的关键技术……………………………………………12

十二、系统测试…………………………………………………………………………13

十三、小结…………………………………………………………………………………16

十四、参考文献……………………………………………………………………………16













mycollege.net系统规划与总体设计



王 云

西南师范大学计算机与信息科学学院 重庆 400715



摘要:mycollege.net系统采用基于xml的开放式结构,为mycollege.net内部其它应用系统的开发和应用提供了一种崭新的思路。应用系统可以通过mycollege.net的核心子系统提供的统一身份认证服务和公共资源共享服务,提高各种数据资源在系统级的复用度,在简化系统开发,增强系统功能、增强用户登录体验等方面收到良好的效果。

abstract:the system named mycollege.net, which uses opened architecture based on xml, provides a fresh idea and method for its internal subsystems and other applications. the applications can make data more re-usable on system level and achieve better effect on simplifying system development, enhancing system functions and user logon experience through the universal identity authentication service and the common resource sharing service of mycollege.net core subsystems.

关键词 webservice 统一身份认证子系统 公共资源管理与共享子系统

一、 前言

在mycollege.net系统的开发中,作为组长,我主要负责整个系统的规划和总体设计,负责小组成员之间的协调并提供技术支持。针对问题定义提出了相应的解决方案,确定了mycollege.net的两个核心子系统并划定了各自的功能,并在技术上论证了开发该系统的可行性。为了降低其它小组成员开发各个子系统的难度,在总体设计中我定义了核心子系统开发所应采用的软件体系结构,给核心子系统的体系机构提供了参考。最后,制定了mycollege.net下其它应用系统的开发流程、身份认证及数据访问所应采用的策略。

二、 问题定义

在高校不同的信息管理系统之间,比如图书馆管理系统和学籍管理系统中,都有对于系统用户进行管理的功能,不同的用户有不同的用户名,密码,权限等等。在传统的开发方式下,不同的信息管理系统中都必须处理用户身份认证和授权控制问题。但实际上它们的处理方式基本是一致的,由于这个功能不能在不同的系统之间复用,这就造成了系统的重复开发。另一方面,当一个特定的人同时充当多个不同信息管理系统中具有特定权限的用户时,他需要重复的在各个系统中注册,同时必须记住在不同系统下的用户名和密码等信息,这自然就带来了众所周知的人为安全问题:如果他采用同样的用户名和密码,那么一旦不小心泄露出去后果将不堪设想;如果他采用完全不同的用户名和密码,那么他就需要记住这些不同的信息,这对用户来说无疑是一个挑战。因此,能否有一种方法,让用户注册一次就可以在不同的系统中使用受限的服务,从而避免重复注册呢?

围绕着不同应用系统之间各种资源复用的主题,继续深入下去后我们发现,上述的图书管理系统和学籍管理系统都要使用全校学生的基本信息,实际上还有很多其他的信息管理系统在使用着这些基本信息。那么学生的基本信息是存放在一个单独的数据库服务器上呢还是单独存放在独立的服务器上呢?

在前一种方式下,其它的系统要远程连接到数据库服务器上,学生基本信息数据库的结构一旦确定就不能轻易改动,否则会牵一发而动全身,造成其它系统的不稳定。而且还存在一个跨平台的问题,虽然不同的应用系统采用标准的sql语句与数据库进行通信,但当信息管理系统运行在异构的网络环境中或运行在不同的系统平台上时,如何与数据库服务器互连又是一个棘手的问题。

而后一种方式虽然数据库独立性比较强,但它又会带来数据的重复存储,数据不一致性增大,系统的重复开发等问题。

归根揭底,所有的这些应用系统缺乏一种统一的规划,软件工程中的复用技术无法在系统级实现,系统之间公共数据资源不能被共享,通讯协作在系统级难以实现。因此我们的设计《基于xml的开放式集成系统(mycollege.net)设计与开发》试图对此问题进行统一的规划,在全局上给出一个尽量完善的解决方案。同时顺应现代软件网络化的潮流,加强各种应用子系统之间通过网络进行协同工作的能力。

三、 设计目标

以一种灵活的方式集成高校内部已有的、现存的和未来的各种应用系统,对这些应用系统提供最基本的服务,最大限度的提高各个应用系统之间的资源共享程度,增强不同应用系统之间的协同工作能力,最终促进高校的网络化管理。

四、 设计任务

mycollege.net运行的支撑环境是统一身份认证子系统(uia)和公共资源管理与共享子系统(cresource)。这两个核心子系统对mycollege.net中其它子系统的开发运行提供了支撑环境。需要说明的是应用系统和子系统在mycollege.net下是同一个概念,所有的应用系统一旦集成进来就成为mycollege.net下的子系统。

公共课成绩管理子系统是为了便于公共计算机教育部对于公共课成绩的管理及网上发布而开发的。这个子系统的开发完全是在我们的mycollege.net下进行的,遵循我们制定的mycollege.net下应用系统开发流程,使用了mycollege.net中的各种服务,包括统一的身份认证、集中的基于角色的授权控制以及对于公共数据资源的访问。另一方面该系统的成功开发及与mycollege.net核心子系统的顺利集成也将证明mycollege.net设计的先进性和可行性。

五、 可行性分析

开发这样一个复杂的系统,究竟在技术上能不能实现、能否产生预期的效果呢?通过上述设计任务的描述,我们知道该系统最核心的部分是uia和cresource,而最大的困难就是寻找一种灵活的、简单的技术实现网络环境下数据的传输和交换,这种技术必须是标准的、跨平台的,网络结构无关的。幸运的是在microsoft.net平台上,有一种叫webservice的技术,这种技术完全可以满足我们的要求。同时.net平台还有很多其它的优点,现分述如下:

(一) microsoft.net特点

1、 创建高度分布的应用程序

商务应用程序的趋势一直是高度分布的模型。下一代的应用程序要将它们的元素分布在各个机构中。它与当今的主要模型形成了鲜明的对比——在当今的主流模型中,应用程序(除了基于浏览器的客户程序)的所有元素都位于一个机构的内部。

2、 简化软件开发

开发人员需要能够将注意力集中在应用程序的业务逻辑处理部分,而不是为状态管理、伸缩性等编写逻辑代码。在.net中,编写internet应用程序不需要具备太多的internet专门的技术知识。

3、 在web上的更好的用户界面

用于internet的用户界面开发也需要尽可能地类似于本地访问。尽管使用本地wubdiws界面比浏览器更能提供优秀灵活的界面,但是这种界面需要专门的运行平台(.net),实际应用中并不能保证每一台客户机都装有.net。

4、 简化部署

dll hell的问题以及安装基于窗体的应用程序需要的大量工作量,是当

前部署问题的两个例子。.net的目标是使它的部署和在dos上一样简单——只需将编译的模块复制到系统上之后它即可。无需注册,也没有guid。

5、 对各种语言的支持

所有支持.net的语言使用相同的数据类型和接口规范,这就能够让所有的.net语言透明地进行交互操作。一种语言能够轻而易举地调用另外一种语言,甚至能够继承另一语言编写的类,并扩展它们,其它平台都没有这种级别的语言互操作性。

6、 平台的可扩展性

.net完全基于对象的方法旨在通过继承来扩展基本功能。该平台的功能大致分为几部分。允许各部分在需要时被替换为新版本。在将来,很可能将与外部世界连接的新方式添加到windows form, web form和web服务中。.net的体系结构使这一点变得十分切合实际。

7、 未来的可移植性

.net尽量抽象掉底层平台,将操作系统分离开来。程序员面临的不是操作系统而是统一的.net平台。.net的主要部件已经提交给标准化组织并打算将.net的核心在不同的操作系统上实现标准化。这样最终的目标是一次编译,可以将其移动到不同的操作系统中的另一个.net中,无需任何改动。

(二) webservice机制

在.net中,一个webservice就是一个可编程的单元,它可以提供一系列的服务,比如一些商务处理。而且通过使用互联网的标准(比如xml和http),这个服务可以被很多不同的系统所利用。正是由于xml和其它互联网标准,各种程序间的兼容问题才得以解决,webservice才成为现实。webservice利用四个模块:directory,discovery,description及wire format来对所提供的服务进行描述并提供一个标准的数据传送格式。directory提供了一个集中的位置供webservice的提供者发布他们所开发的webservice的相关信息。discovery用于帮助webservice客户端了解到webservice的存在以及在哪里可以找到webservice的描述文档。description定义了webservice的行为以及告诉webservice客户端如何使用它。为了保证通用性,webservice使用开放的协议,这些协议几乎可以被所有支持最常用的系统所使用,比如通常使用的http和soap(简单对象访问协议)协议。而soap是webservice的核心协议,它是一种基于xml的用于分散和分布环境下信息交换的轻型协议。

六、 总体设计

基于xml的开放式集成系统(mycollege.net)提供了一个开放式的体系结构来集成校园内部已有的、现有的和未来的各种应用系统;以xml技术提供灵活的系统间数据交换格式,增强系统间的协同工作能力,降低各种应用系统的冗余开发,提高应用系统开发效率。系统的整体结构如下:




mycollege.net中有两个核心的子系统:统一身份认证子系统(uia)和公共资源管理与共享子系统(cresource)。这两个核心子系统对mycollege.net中其它应用系统的开发运行提供了支撑环境。

统一身份认证子系统提供了统一的应用系统身份认证及用户身分认证服务、集中的基于角色的授权控制服务。统一身份认证子系统的单点登陆技术改善了用户在不同应用系统中的登陆体验。就如微软的.net passport一样,用户只需登陆一次,在访问其它的应用系统时便自动登陆无需输入用户名和密码。任何一个在统一身份认证子系统中注册的用户在整个mycollege.net中都可以使用统一的身份标识来使用各种应用系统,在不同的应用系统之间切换时将进行自动登陆。应用系统对于用户的授权访问以及用户对于个人隐私信息的发布在统一身份认证子系统中都有严格的授权控制。

公共资源管理与共享子系统提供了mycollege.net中各种应用系统最常使用的公共数据资源,并将这些数据资源通过webservice技术发布在网络上,应用系统可以通过网络受控的使用这些数据资源。不同的应用系统对于不同的资源类型及资源属性有不同的读写访问权限。这样各应用系统的开发将有很强的灵活性,开发者可以针对该系统未来的运行环境(如网络状况等)制定出相应的数据访问策略,在减少数据存储的冗余性,增强数据更新的同步性,数据使用的跨平台性等方面获得最好的效果。

公共数据资源是这样的数据资源:它是某一组应用系统所使用的数据资源的交集,如果cresource中不存在这个交集,则cresorce的管理员可以通过cresource中的管理功能创建这个资源并设置它的属性。所有这些足以保证公共数据资源满足绝大多数的应用系统需求,最大限度的提高公共数据资源的共享度。在我们的cresource中,它至少包含学校的系科专业设置信息及学生的基本信息,如学号、姓名、性别等信息。至于学生是否转系、转系的详细信息则不应该保存在cresource中,因为它应该是由学籍管理系统所存储和处理的。

公共课成绩管理子系统将作为一个相对独立的系统单独开发,在开发完成后将与mycollege.net集成起来。

各个子系统之间的集成是采用webservice技术,由于各个子系统在公布其自身的web服务的同时也要请求其它子系统提供的web服务,因此所有的子系统便通过webservice之间的调用松散地耦合在一起。

下面通过图示说明一下公共课成绩管理子系统在mycollege.net下的工作过程:




假如用户要使用course2,他在请求登陆时通过uia中统一的“登陆”按钮被course2重定向到uia的统一登陆界面,用户输入他的用户名和密码,uia通过身份验证后将验证信息和用户在course2下所具有的权限(角色)返回给course2,这样course2便借助于uia完成了对用户的身份验证和权限分配。在用户使用course2的过程中,可能要访问某个学生的基本信息,course2首先在本地数据库中查询数据,如果该数据不存在便调用cresource中的webservice接口获取数据,并进行处理。最后当用户准备离开course2时,他通过uia中统一的“安全退出”按钮退出登陆。或者通过单点登陆技术自动登陆到其它的应用系统。如果用户之前没有统一的身份标示或不具备使用course2的权限,那么他可以先到uia上申请一个统一的身份,并申请在course2中的权限。如果course2的管理员同意你的申请并启用了你的角色,那么你就可以使用你的用户名和密码使用course2。

七、 mycollege.net 中子系统的体系结构

在一个大型的应用系统中,简单的表示层、逻辑层、数据访问层并不能满足要求。mycollege.net结合了.net平台的特点对简单的三层结构做了扩充,使之能够满足网络环境下绝大多数应用系统的需要,对mycollege.net下的各个子系统及应用系统的开发起到指导性的作用。扩充的体系结构图如下所示:




表示层有windows form和web form两种形式,对应于c/s结构和b/s结构。通过webservice技术两种结构可以共存,且c/s结构在.net平台上的开发非常简单,几乎不用考虑高深的网络编程。

逻辑层被细化为商务外观层(businessfacade)和商务逻辑层(businessrules)。前者主要是封装应用系统中分散的商务逻辑,给表示层提供一个简洁的无状态的调用界面。它实际上是对系统需求在函数接口层的精确描述,即该层类中的函数完全表达了系统需求中涉及的功能。这样,一旦该层设计完成,表示层的开发者就可以利用该层进行独立的界面开发。businessrules层主要是表达商务规则。例如对于uia中对于用户email地址的验证,简单的验证条件是email地址中必须包含@符号,而复杂的验证方法将会通过某种网络服务查看该地址是否存在并有效。对于email的验证就是一条商务规则,就应该在businessrules层中处理。

webservice层是这种体系结构中新出现的层,它其实相当于网络版的businessfacade层,系统中的某些功能可能需要公开并通过internet发布,并允许用户针对这些功能定制不同的用户界面(如c/s和b/s)。

数据访问层(dataaccess)负责数据库的处理,它仅仅对数据库中的数据进行添加删除修改,并不考虑这些操作是否满足商务规则,因此重要的操作必须先通过businessrules层的审查才可以被调用。dataaccess层一般是直接建立在.net平台上的ado.net层之上,可以对数据库进行灵活的操作,但是为了简化系统的开发,微软提供了一套工具microsoft data application block(简称dab),用于简化ado.net的使用。我们的dataaccess层可以直接建立在dab层上,在大多数情况下能够满足要求。当然,你也可以两种方式混合使用。

最后一个层是model层。在设计了如此复杂的系统结构后,我们不得不考虑一个问题:各层之间的数据如何进行传递。如何将从数据库中提取出来的dataset传递给businessfacade层或businessrules层?由于各层设计时所使用的数据格式可能不同,在传递过程中如何进行格式转换?model层的出现正是解决这一问题,它定义了各个层之间传递的数据实体的数据结构,在ado.net中它可以完全由dataset代替,也可以使用自定义的类来实现,两种方式各有各的优缺点。

在n层结构中,层间的调用关系必须遵循一定的原则,这样才能体现出分层结构的优点。一般来说,各层只能被它的上层调用,不能被同一层或下层调用。businessfacade层中涉及到商务规则的函数应先调用businessrules层的函数,由businessrules层完成商务规则的实施并调用dataaccess层执行具体的数据库操作;不涉及商务规则的函数可以直接通过dataaccess层来完成。webservice层与businessfacade层几乎一样,不同的是它可以调用businessfacade中的函数(相当于同一层的调用)。dataaccess层作为最低层可以被其上的任意一层调用。而model层由于作为各层之间数据交换的媒介,能够被dataaccess及其上的任意层次调用。

关于各层之间状态的处理,这里有一个说明。状态是对象在指定时间内保持存在并可用,以提供对属性访问和事件激发的访问支持。例如在dataaccess层可以打开数据库连接并一直保持连接状态,这样在每次访问数据的时候就可以在上次结束的地方开始,而不用重新打开数据连接和查找。在有状态的系统中虽然可以更灵活的访问数据,但系统的开销可能会非常大。比如在数据库连接中,如果连接的用户从10个猛增至1000个,那么数据库就需要维持1000个打开的连接,这对系统资源的浪费是很大的。无状态对象的频繁创建虽然耗费时间,但它提供了极强的可伸缩性,当用户增加时,每个用户的请求处理完后就立刻销毁相应的对象,释放系统资源,系统的负担增加只是在对象的创建时间上有所延迟,但这可以通过对象池的缓存功能来解决。我们在层间传递的数据对象(model层对象)很明显就是一个无状态的对象,它只负责传递数据实体,并没有保存任何状态。因此,如果你愿意使用无状态的结构,那最好不要在层间调用时为节省对象的创建时间而缓存对象。

上述结构具有很强的灵活性,在mycollege.net下,各个子系统的开发可以参考上述的体系结构,并进行适当的裁剪。例如在公共资源管理与共享子系统中,由于子系统相当于一个网络版的dataaccess层,其并不涉及复杂的商务逻辑,因此就可以将businessrules层去掉,将简单的逻辑加入到businessfacade层中。

八、 mycollege.net所倡导的应用系统开发流程

(一) 将应用系统注册成为mycollege.net的成员站点(membersite)

应用系统开发者首先向uia提出申请,要求成为uia的成员站点,同时提供其应用系统所需要的用户角色(相当于设置其用户的权限级别,如管理员、游客等)等信息。如果开发者的申请被uia的管理员所批准,那么他将得到一个usid,这个usid将成为此应用系统在mycollege.net中的唯一身份标示。

(二) 开发你的应用系统

此时你的应用系统已经有资格使用mycollege.net内部的核心服务了。首先是使用uia提供的身份认证、基于角色的授权控制及单点登陆等服务。但是这并不意味着应用系统必须使用这些服务,它可以有选择的使用其中的某些服务。举例来说,如果应用系统对于权限的控制不是很严格,只要是mycollege.net中的用户都可以使用此系统,那么它就可以不使用权限控制服务而仅仅使用身份认证服务。但是,mycollege.net将强烈建议开发者使用统一身份认证子系统中的全部功能,因为这样做不仅能够大大提高应用系统的开发效率,同时也给应用系统的使用者带来诸如单用户名、单密码及单点登陆等使用上的方便。

mycollege.net的核心服务还包括公共资源管理与共享服务。mycollege.net中的公共资源管理与共享子系统管理着大量的数据,且这些数据对于大部分校园信息管理系统都是公共的、必不可少的,例如学生的学号、姓名、系科等基本信息;教师的教工号,学校的系科专业信息等等。这些公共数据资源对于很多校园应用系统的开发都是必需的数据。任何一个加入mycollege.net中的应用系统都可以在得到公共资源管理与共享子系统的授权后受控的使用特定的数据。mycollege.net所使用的webservice技术将保证在不同的网络结构和系统平台上开发者都可以轻松的使用这些数据服务。

现在我们知道在mycollege.net中存在两个核心子系统以及大批的应用系统,实际上除了两个核心子系统提供服务外,其它的应用系统也可能向外部提供web服务。我们的图书馆管理系统可以提供这样一个服务:根据学生的学号查询学生的借阅情况。这样新加入的应用系统还可以使用mycollege.net中已有的应用系统所提供的web服务。

(三) 安装部署你的应用系统

在mycollege.net中,应用系统不再是一个孤立的单机系统,它是一个网络化的软件系统,通过网络使用mycollege.net中核心服务和其它应用系统公开的web服务(相当于web服务的消费者),同时发布自己的web服务(相当于web服务的生产者)。它们组成了一个复杂的网状结构并且相互协同工作。由于系统的网络化与系统间的网状化,其安装部署将与传统的桌面系统有所不同,必须采取特殊措施,以简化系统的安装部署。在mycollege.net中,对于应用系统的安装部署由下列建议:

尽量使应用系统安装在服务器端,做到客户端的0安装,对于b/s结构这是很简单的。对于c/s结构,由于其采用的是windows界面,要求必须运行在本地客户机上,但这并不意味着客户端系统必须安装在客户机上。在.net中可以利用远程窗体将客户端系统安装在服务器上,然后做一个页面提供一个超链接。客户机运行系统时将其下载到本地缓存运行。这样就避免了客户端的安装部署,从而避免了软件升级时带来的大量客户端版本更新问题。版本更新时只需重新部署到服务器上即可,.net中的增量下载技术将保证客户机上运行的始终是应用系统的最新版本。

(四) 应用系统的运行环境

由于应用系统是mycollege.net的一个组成部分,它的正常运行离不开核心子系统和其它应用系统的支撑,因此应用系统的正常运行必须由可靠的网络连接来保证。对于某些纯粹的数据获取系统来说,开发者可以采用特殊的技术(如将数据缓存在本系统中)来降低应用系统对于网络的依赖性。

九、 mycollege.net中的身份认证与权限控制策略

mycollege.net下面的uia子系统中的身分认证与权限控制使用起来是非常方便和灵活的,应用系统可以根据自己对安全性的要求有选择的使用其中的服务。

纯粹的身份认证策略:有些应用系统对于安全性的要求并不是很高,比如学生成绩查询系统,只要是mycollege.net下的具有统一身份的用户都可以使用,对用户没有严格的授权控制。在这种情况下,使用uia中的身份认证服务是非常方便的,应用系统开发者只需在uia中申请注册并获取自己的usid后就可以调用uia中的身份认证服务。

身分认证与授权控制的综合使用策略:对于安全性要求比较高的应用系统,除了使用uia的身份认证服务外,使用uia的授权控制服务是非常必要的。uia中的授权控制是集中的基于角色的授权控制。应用系统开发者在申请获取usid的同时,向uia提供自己所开发的应用系统中所要设置的用户角色。例如一个典型的应用系统所包含的角色有管理员和一般用户。在uia中的注册工作完成后,开发者就可以使用其中的身份认证与权限控制服务。

十、 mycollege.net中公共数据资源访问策略

mycllege.net下的公共数据资源获取有三种不同的策略:同步访问策略、缓存策略及异步访问策略,三种不同的策略各有个的优缺点及应用场合。

同步访问策略:应用系统自身并没有设置专门的数据库或文件来保存所需的公共数据资源,每当应用系统需要使用公共数据资源时,就通过网络调用cresource子系统中的webservice获取数据,而cresource中保存的是mycllege.net体系下的最新数据。因此该策略能够保证应用系统同步获取到最新的数据,使得不同应用系统中的数据达到高度的一致性。这种数据访问的方式的缺点是对网络的性能和可靠性要求比较高,应用系统中对于cresource中webservice的频繁调用会加重cresource服务器的负担。

缓存策略:在该策略中,应用系统需要设置本地数据库来缓存所需的公共数据资源。应用系统在访问所需的公共数据资源时先试图从本地数据库中检索数据,如果命中本地数据库那么就直接调出来使用。如果本地数据库中没有缓存所需的数据,如果没有命中本地数据库,那再通过webservice获取最新的数据,同时采取一定的缓存策略将获取到的数据缓存到本地数据库中,以支持后面对于该数据的高速访问。这与计算机系统中的虚拟存储器的工作原理有点类似。这种数据访问策略克服了同步策略中对网络高性能高可靠性的苛刻要求,因为大量的公共数据资源被缓存在本地数据库中。但是,它引入了一个问题,如果数据在访问的过程中被修改了,该怎么办?与虚拟存储器类似,采用何种写回策略将修改的数据写回到cresource是一个值得应用系统开发者思考的问题。

异步访问策略:该策略同缓存策略类似,同样要在应用系统中设置本地数据库。但是在数据访问地过程中并没有缓存策略中的那么复杂,应用系统仅仅是定期或不定期的访问cresource子系统,获取最新的公共数据资源,然后更新本地数据库,同时将在本地更新后的数据写回到cresource中。虽然数据更新不能同步,但对周期性更新的公共数据资源比较适用。

应用系统开发者在具体使用时应考虑系统运行所处的网络环境和自身硬件设施的配置,根据这些条件制定出最合适的公共数据资源访问策略。

十一、 统一身份认证子系统中的关键技术

mycollege.net中最关键的技术是uia中的身份认证与权限控制。在asp.net中通过相应的函数对页面实现身份认证是非常简单的,但是这个简单的函数并没有提供在页面中附加用户角色的功能。因此我们必须利用asp.net中身份认证的底层函数来实现附加用户角色的功能。下面是部分重要地代码:

login.ascx控件中附加用户角色的代码:

private void button1_click(object sender, system.eventargs e)

{

//对参数进行规范化处理,去掉多余的空格

string nickname=textbox1.text.trim();

string password=textbox2.text.trim();

//调用uia的webservice来完成用户身份验证

if(new businessfacade.usersystem().checkuser(nickname,password))

{

//将登录用户的信息加入到session中

model.userdata user=null;

user=new businessfacade.usersystem().getuser(nickname);

this.session["user"]=user;

//创建身份验证票

formsauthenticationticket ticket = new formsauthenticationticket (1,nickname,datetime.now, datetime.now.addminutes(30), false,"","/") ;

string hashticket = formsauthentication.encrypt (ticket);

httpcookie usercookie = new httpcookie(formsauthentication.formscookiename, hashticket);

//添加到cookies中

response.cookies.add(usercookie);

//跳转到适当的页面

if(this.session["returnurl"]!=null)

response.redirect (this.session["returnurl"].tostring(),true);

else response.redirect ("default.aspx",true);

}

}

global.asax中恢复用户名和角色的关键代码:

protected void application_authenticaterequest(object sender, eventargs e)

{

httpapplication app = (httpapplication) sender;

httpcontext ctx = app.context ; //获取本次http请求相关的httpcontext对象

if (ctx.request.isauthenticated == true) //验证过的用户才进行role的处理

{

formsidentity id = (formsidentity)ctx.user.identity ;

formsauthenticationticket ticket = id.ticket ; //取得身份验证票

string[] roles = ticket.userdata.split (',') ; //将身份验证票中的role数据转成字符串数组

ctx.user = new genericprincipal (id, roles) ; //将原有的identity加上角色信息新建一个genericprincipal表示当前用户,这样当前用户就拥有了role信息

}

}

十二、 系统测试

(一) 子系统独立测试

mycollege.net系统由两个核心的子系统和一个应用子系统组成,在开发过程中三个子系统几乎是同步进行的,因此在子系统开发的中后期就有必要进行独立的测试。由于两个核心子系统相当大一部分功能是通过webservice技术发布的,如果要通过界面进行完整的白盒测试,必须编写相应的客户端测试程序,这显然会增加程序的开发量。而采用webservice自动生成的调试界面又有很大的局限性,因此在子系统独立测试中我们主要采用了黑盒测试技术对代码进行审查。

(二) 综合测试

mycollege.net是一个集成的系统,子系统的单独测试成功并不能保证整个系统的协调工作,因此对其进行综合的集成测试以确保整个系统能够正常工作是非常重要的。在测试的过程中因为已经有子系统集成进来,因此采用的是白盒测试技术。对于两个核心子系统的集成测试步骤如下:

1. 对cresource的集成测试。我们开发的一个学生信息处理实用工具sget是完全建立在cresource所提供的服务上的。sget的主要提供在网上查询学生基本信息的功能,通过输入学号或姓名等关键字从cresource中调出相应的数据,sget的成功运行只能说明对cresource的初步集成成功,因为sget只用到了其中的查询功能。对于cresource的更进一步的测试还有待进行。下面是sget测试中的一个界面。



2. 于uia和cresource更进一步的综合测试由公共课成绩管理子系统course2和学生信息处理实用工具sinput来完成,因为这两个子系统都使用mycollege.net中核心子系统的服务。综合测试中这两个子系统同时进行,因为要测试uia中具有统一身份的用户在两个不同的成员站点间相互切换的功能,因此该部分测试的重点是设计完整的用户名测试用例。由于版面原因,下面只列出了部分测试用例:




在测试过程中对于上述测试用例,我们进行了密码修改和角色的申请等修改操作后,course2和sinput中所有的结果都是在预料之中,这就充分说明了我们整个系统确实能够协调的工作。下面是uiasdk中windows form形式的统一登录窗体在不同的用例下所显示的登录失败信息:




十三、 小结

在两个多月的时间中,我带领我们小组圆满的完成了毕业设计的任务。作为整个小组的组长,我有更多的机会参与到毕业设计的各个过程中,对于软件开发过程中的各项活动有了充分的了解。毕业设计不仅是一项技术性的工作更是一项工程性的工作,它需要的不仅仅是我们对技术的掌握,更需要工程化的管理方法、开发方法及小组内各成员之间的相互协作。在开发的过程中,我们的小组成员表现出了高度的协同工作能力,为以后从事软件开发工作奠定了良好的基础。由于时间关系,有部分实现未达到当初的设计目标,在该项目下一步的开发中应重点解决单点登录的难题。最后,本次毕业设计能够顺利完成离不开我们指导老师邹显春老师的指导和帮助,卢心红老师、陈武老师、闻晓老师、李运刚老师在此过程中也给予了极大的帮助,对他们的帮助表示衷心的感谢。还有小组所有成员对我的大力支持,在此对他们表示衷心的感谢!

十四、 参考文献

[1] 邵维忠、杨芙清.面向对象的系统设计.清华大学出版社.

[2] 方贵宾 等.uml和统一过程.机械工业出版社.

[3] 覃征.软件体系结构.西安交通大学出版社.

[4] 吴炜煜.面向对象分析设计与编程.清华大学出版社.

[5] 魏胤红 译.asp.net分布式数据应用程序高级编程.清华大学出版社.

[6] 张加荣 译.vb.net高级编程.清华大学出版社.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表