首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于J2EE/Web架构的安全系统的设计与实现

作者:白国枝 来源:现代电子技术


  摘 要:针对某大型企业的综合业务处理系统,结合Java2核心API与扩展API进行分析,提出3种方式,从多个层面解决基于J2EE分布模型的Web应用系统的实现及该应用系统的安全问题。采用J2EE体系结构进行应用开发,构造完全不依赖平台的系统,支持分布式事务处理,高效地开发和发布分布式应用系统。表明J2EE的安全编程模式及Weblogic Server的JNDI认证和授权的安全机制,是企业的首选构造平台。
  关键词:J2EE;MVC;JAAS;JNDI
  中图分类号:TP39308 文献标识码:B 文章编号:1004373X(2008)1609404
  
  Design and Development of Security System Based on J2EE/Web Architecture
  BAI Guozhi
  (Center of Network,Xuchang University,Xuchang,461000,China)
  
  Abstract:Aiming at the integrated network service system of a large enterprise,combining the Java2 core API and the expanded API to carry on the analysis,three methods are put forward,security of the realization and the Web applied system from several levels based on J2EE distribution model are resolved.Adopting the J2EE system structure to carry on the business application development,constructing the system that did not depend on platform,which supporting the distribute type business processing,the distributed application system with high efficiency is developed and released.It shows the safe programming mode of J2EE and the safe mechanism of authorization of Weblogic Server is the first choice of enterprise to choose to construct the platform.
  Keywords:J2EE;MVC;JAAS;JNDI
  
  1 J2EE在Web开发应用中的实现
  
  1.1 系统设计与实现
  客户是一家大型的半导体生产企业,希望建立一个综合业务处理系统,能将企业生产中的采购、销售、发运、退货等业务全部统一到一个信息平台上,实现信息的共享,加快内部处理响应速度,针对基于B/S结构的综合业务处理系统采用J2EE 应用中的MVC架构,如图1所示。“JSP页面”对应于“V”,控制类和辅助类对应于“C”;实体类和数据类对应于“M”,使用UML建模工具Rational Rose对企业系统需求进行建模分析,把业务需求转换成用例视图(Use Case Diagram)。然后对每个用例进行细化,对每一个用例进行分析实现它的时序图(sequence diagram)或其他视图,接着使用Jbuilder9等工具来完成代码的编写和测试工作,在编程时,根据Rose生成的UML视图来编写相应的代码。
  1.2 系统的构成
  本系统服务器端选用BEA Web Logic Server7.0作为J2EE中间件平台,选用Oracle8i作为RDBMS数据库服务器。客户端使用简单的IE浏览器即可。在多层结构的应用中,BEA WebLogic Server7.0可以提供开发和利用服务器端业务逻辑的基本框架,支持分布式编程模型,提供一定程度的透明性。以下使用相关的例子都是以BEA Web Logic Server7.0和Oracle8i为例来进行说明。
  
  2 系统中的安全问题探讨
  
  2.1 J2EE体系中的JAASJava验证和授权
  JAAS通过在应用程序和底层的验证和授权机制之间加入一个抽象层,可以简化涉及到Java Security包的程序开发,抽象层独立于平台的特性使开发人员可以使用各种不同的安全机制,而且不必修改应用程序级的代码和其他Java Security API相似,JAAS通过一个可扩展的框架——服务提供者接口(Service Provider Interface,SPI)来保证程序独立于安全机制。应用程序级的代码主要处理Login Context,在Login Context下面是一组动态配置的Login Modules,Login Module使用正确的安全机制进行验证。
  JAAS可以同时在客户端和服务器端应用程序上工作。Web Logic Sever使用JAAS在胖客户端认证和内部认证,因此,只有客户化Authentication Provider的开发者和远程胖客户端需要直接使用JAAS,瘦客户端和在container内的胖客户端( EJB throgh servlet )不需要直接使用JAAS。
  2.2 J2EE的安全编程模式及Weblogic Server的JNDI认证和授权的安全机制 J2EE定义2种安全编程模式,一种模式称为声明性安全,它使用一种表单,表示应用程序的安全结构,其中包括角色、访问控制和认证要求;另一种模式称为编程性安全,在应用程序代码中增加安全检查,能够把应用程序代码和安全限制分开,所以通常最好选择声明性安全。但当声明性安全模式不能单独满足安全要求时,可以在应用程序中使用编程性安全模式。因此应用程序本身必须根据用户的要求和权限,了解安全情况并做出动态决策。
  Web logic server实现JNDI认证和授权的安全机制[1,2],JNDI名字树是经过整个Web logic Server实例的集群来复制的,这使得JNDI名字树就像一个安全的上下文环境的跟踪机制,在实际系统的实现中,通过JNDI服务,才能实现J2EE两种安全编程模式的相互补充[3]
  2.3 系统中的安全问题及解决方法
  2.3.1 Web层的安全问题
  (1) 身份认证和安全审计
  认证是确定用户身份的过程,有用户名/密码结合的认证或更高级的认证。基于不同情况可供选择的认证方法有:
  ① 基于密码的认证;
  ② 基于表单的认证;
  ③ 数字证书/HTTPS认证。
  文中的综合业务处理系统采用第一种基于密码的认证,安全审计,是需要把各个安全管理功能收集上的事件以及记录下来的安全日志进行综合分析,安全日志主要记录用户对资源的访问过程,以及对系统的管理操作。若系统出现问题,管理人员就可以审核谁对该综合业务处理系统做了那些操作,以便于如何进行系统恢复。
  
  (2) 安全套接字层SSL
  SSL是一个协议,它通过加密数据确保数据在传输中的保密性,SSL又用于认证客户机和用户,SSL服务是基于加密技术的,该技术把可阅读的“普通文本”加密成不易阅读的“密码文本”。
  (3) 会话管理
  目前有几种方法保持Session会话状态,一种在客户端保存Session状态,另一种是在服务器端保存Session状态。在客户端保持Session状态有几个好处:
  ① 相对容易实现,如采用HTTP hidden变量或者HTTP cookies来保存会话状态;
  ② 如果需要记录的状态量较少,工作效率相当好。
  2.3.2 业务层的安全问题
  (1) EJB事务的安全
  EJB框架不规定特定于任何事务服务或协议的事务管理。但是规范要求把JTS的javax,transact ion,User Transaction接口提供给EJB,类似于MTS,EJB框架提供了事务的声明界定。容器有5种属性类别:不支持、要求、支持、要求新的、强制,通过5种属性类别的定义,容器知道:是否在一个全局上下文中调用bean,是否在一个新事务或者已有相关联的事务调用bean。EJB框架支持3类事务界定:一是声明界定,在一个EJB服务器上部署bean的时候指定要求的属性,bean可以用javax.ejb.EJB Context.set Rollback Only()方法来为回滚而标记事务;二是bean管理的界定,类似于客户管理的界定;三是用户管理的界定,Java客户可使用javax.transact ion.User Transaction接口来编程界定事务。
  (2) EJB方法访问控制
  访问权限定义调用方法的一个或多个安全角色,如果调用标识是角色表示中的一个成员,容器将允许这个方法调用继续执行。否则,EJB容器将发出一个java.rmi.RemoteException的异常信息,且禁止调用的执行。
  EJB的安全角色EJB配置描述器中使用标记符定义。安全角色标记符中包括一个选用的标记符,一个标记符,分别用于提供描述信息,定义角色名字。也可以在EJB配置描述器中使用标记符,定义方法访问控制表,方法访问控制权限标记符中包含一个选用的标记符,一个或多个标记符,分别用于提供描述信息以及定义角色和方法名字。后2个标记符的语义是,列出的任何一个角色都可以访问任何一个匹配的方法,其中,方法可以采用不同的形式进行定义,第一种方式是“*”通配符,意指EJB中的所有方法;第二种方式是标记符,也可以定义某一类方法都具有指定的方法访问权限;第三种方式是标记符也可以严格地指定方法的语法格式, 只有采用给定语法格式的方法调用才具有定义的访问权限,下面是这3种方式的例子。
  <securityrole>
  <description>the description about salesman role!
  </description>
  <rolename>salesman</rolename>
  </securityrole>
  ……
  <methodpermission>
  < rolename>Salesman</rolename>
  //第一种方式,定义要求调用者必须是Salesman组成员,才能访问SalesEJB;
  <method>
  <ejbname>SalesEJB</ejbname>
  <methodname>*</method/name>
  </method>
  //或者第二种方式,定义说明任何名字为getCustomer List的方法只能由Salesman角色的成员访问
  <method>
  <ejbname>SalesEJB</ejbname>
  <methodname>getCustomer List</methodname>
  </method>
  //或者第三种方式,采用getCustomer Data(java.lang.String)格式的方法.限定为只有Salesman角色才可以访问;
  <method>
  <ejbname>SalesEJB</ejbname>
  <methodname>getCustomer Data</methodname>
  <methodparams>java.lang.String</methodparams></method>
  </methodpermission>
  至此,已经为SalesEJB定义了安全模型,其中只有适当角色才能够访问SalesEJB的敏感部分,但是,还没有指定把实际的系统用户映射到应用的安全角色,下面给出配置描述器的一个配置说明:把系统用户john和kate映射于Salesman的安全角色,可以根据SalesEJB的安全模型,根据它的方法访问控制表访问相应的数据模块。
  <securityDroleassignment>
  <rolename>Salesman</rolename>
  <principalname>John</principalname>
  <principalname>Kate</principalname>
  </securityroleassignment>
  EJB安全API仅由java.security.Principal的getCaller Principal()方法和EJB Context的isCaller In Role(String role Name)方法组成,isCaller In Role()方法是一个针对上述安全模型的接口,它仅测试当前用户是不是给定的角色的成员,getCaller Pricipal()方法返回调用者本人的信息,通常,用于对调用者本人进行安全检查。例如:
  private Session Contextctx;
  private String user name;
  public void set Billing Address(String role Name){
  If (! ctx.isCaller In Role ("Users") ){
  throw new Security Exception("no so users");
  }
  if(! username.equals(getCaller Principal().get Name()))
  {
  throw new Security Exception ("Caller cannot access this account" ) ;
  }
  //business logic…
  }
  当EJB代码调用is Caller In Role()方法时,它正在引用的是一个相对于Bean实例的本地逻辑角色名,这个逻辑角色名必须映射到EJB配置描述器中的一个具体角色名上,而映射关系可以通过<securityroleref>标记符实现,这个标记符包含一个选用的描述信息和一个引用的具体角色。
  <securityroleref>
  
  Asalesman user
  Salesman
  User
  
  2.3.3 EIS层的安全问题
  (1) RDBMS安全
  数据库的安全性是数据库管理员日常工作中十分关注的一个问题,下面围绕如何保证Oracle数据库具有较高的安全性,使数据库系统处于一个稳定安全的状态进行研究。
  (1) 用户角色的管理
  在本综合业务系统中,Web logic Server使用JDBC连接Oracle数据库,为了充分利用资源和提高访问RDBMS的速度,服务器配置一个数据库连接池,配置连接池时,需要指定连接RDBMS的用户名、密码、JDBCURL和JDBC驱动程序;在程序代码中只使用表示数据库连接池的JNDI名字,这样做的好处是,调整正在使用的数据库系统而不必要修改应用程序。
  (2) 数据保护
  主要是数据库的备份,当计算机的软硬件发生故障时,利用备份恢复被破坏的数据库文件或控制文件或其他文件。另一种就是日志,Oracle数据库实例都提供日志,用以记录数据库中所进行的各种操作,包括修改、调整参数等,在数据库内部建立一个所有作业的完整记录。其三是控制文件的备份,用于存储数据库物理结构的状态,控制文件中的某些状态信息在实例恢复和介质恢复期间用于引导Oracle数据库。
  (3) Oracle数据库备份
  Oracle8i数据库的备份主要有以下几种方式:逻辑备份、物理备份、脱机备份、联机备份。
  (4) 数据库系统的恢复
  有了上述几种备份方法,即使计算机发生故障,如介质损坏、软件系统异常等情况时,可以通过备份进行不同程度的恢复,使Oracle数据库系统尽快恢复到正常状态。
  (5) 其他相关的安全问题
  综合业务系统需要和企业遗留的其他系统进行集成,充分利用已有资源,实现最大程度上资源共享。集成分3个层次:一是数据的集成,在集成之前,必须首先对数据进行标识并编成目录,另外还要确定元数据模型。这三步完成以后,数据才能在数据库系统中分布和共享;二是应用系统的集成,即为2个应用中的数据和函数提供接近实时的集成,在应用系统集成中,对系统的登录、认证、审计是至关重要的;三是业务流程的集成,包括业务管理、进程模拟以及综合任务、流程、组织和进出信息的工作流,还包括业务处理中每一步都需要的工具[4]
  如何实现系统间的无缝连接,J2EE连接器架构(JCA)对J2EE标准集做了的重要的补充,JCA包括3个关键的元素:JCA资源适配器、系统界面、通用客户界面(Common Client Interface,CCI),要支持JCA的事务和安全功能需要目标程序通过资源适配器为程序的访问提供足够的事务和安全界面。
  
  3 结 语
  
  采用J2EE体系结构进行企业应用开发可以构造完全不依赖平台的系统,并且支持分布式事务处理,可高效地开发和发布分布式应用系统,是企业的首选构造平台。文中主要探讨J2EE
  技术在Web应用开发中的一系列安全问题,如身份认证、审计、会话管理、EJB事务安全、EJB方法访问控制、数据库安全等。针对这些问题文中给出相应的解决方案。
  
  参 考 文 献
  [1]Michael Gridley.J2EE应用与BEA Weblogic Server [M].邢国庆,译.北京:电子工业出版社,2002.
  [2]李文举,姜华,刘德山.基于J2EE架构的网络课程管理系统的设计与实现[J].辽宁师范大学学报:自然科学版,2007,30(3):319321.
  [3]罗新.基于Web/J2EE架构的销售管理系统的设计与实现[J].哈尔滨商业大学学报:自然科学版,2006,22(6):8486.
  [4]张靖.基于J2EE平台的Web应用研究[J].成都大学学报:自然科学版,2006,25(4):292294.
  [5]倪礼豪.基于J2EE技术的Web应用[J].微型机与应用,2007,(S1):2224.
  [6]李伟群,邬家炜,刘薇.基于J2EE的分布式Web应用系统框架设计[J].现代计算机,2007(6):5455.
  [7]林青,许锁坤.基于J2EE的企业级系统持久性框架的设计与实现[J].计算机工程与设计,2007(7):1 7321 734.
  
  作者简介 白国枝 女,1965年出生,河南许昌人,许昌学院网络中心,讲师。研究方向为网络和信息安全。