background image

Java 编程:J2EE 应用程序的授权概念和解决方案

   引言
  在安全方面,身份验证和隐私已基本标准化和产品化。而对于授权,每个应用程序通
常都有自己独特的方式,这取决于相关应用程序的具体特征。虽然这样说,但在许多应用

 

程 序 中 , 重 复 使 用 某 些 模 式 也 非 常 常 见 , 在 如 何 有 效 利 用 IBM WebSphere 
Application Server(及其他应用服务器)提供的各项功能方面,存在着一些最佳实践(尽
管内置授权功能并不能完全满足特定场景的业务需求)。
  什么是授权?
  授权就是基于用户的权限或用户的类别(

在这种情况下, 用户 可能指某个外部系统,

而不一定是个人)管理对受保护系统资源的访问。因此,授权假定已进行了身份验证,因

——

为如果不知道用户是谁,则根本无法提供恰当的访问控制

而不是在通常情况下所有

用户都具有相同的权限。稍后我们将详细说明各种授权模式或方式,但首先我们将对其做
一个简要的总结。
  基于角色的授权
  基于角色的授权基于用户是某类用户的成员这一事实提供对资源的访问。这通常依赖
于用户具有在用户注册中心定义的组标识。此方法定义受保护系统的各个组件,并将这些

 

组件映射到能够对其进行访问的用户组。这种类型的授权是 J2EE 领域的标准模式。总的
说来,这是一种非常粗粒度的安全形式,用于处理对系统的功能领域的访问,可以由  
URL 

 

或对 EJB 组件的方法调用进行定义。这并不是说无法使用角色定义更细粒度的保护,

但这样做的效果通常不好。
  基于实例的授权

 

  与 J2EE 基于角色的授权通常提供的授权相比,此模式提供了更细粒度的授权,可
以一直细化到项目内的单个对象的级别。我们现在讨论的是数据保护,而不只是功能保护。
  基于关系/所有权的授权
  这种类型的授权是基于实例的模式的一个特例,在基于实例的模式中,在应用程序
的数据结构内存在用户与某些其他受保护的数据之间的所有权关系。这通常意味着必须将
授权规则嵌入到应用程序本身的数据访问逻辑之中。
  用户界面自定义
  虽然这不是真正的授权类型,但与此紧密相关的一个问题是对用户界面进行自定义 ,
以使其仅显示允许特定用户看到的特定功能。例如,菜单或门户页将不会显示未授权用户

 

访问的链接或 Portlet。这实际上是一种预先授权;

授权询问 我能这样做吗?”,而预先授

权则询问一个略为不同的问题 如果我询问是否能进行此操作,答案会是什么?”不过,正
如我们稍后将看到的,这两种情况下的编码技术可以完全相同。
  J2EE 基于角色的授权
  基于角色的授权通过仅将资源提供给已分配相应角色的用户来保护资源。J2EE 提供
了通过使用声明和编程技术来完成此任务的标准方法。我们稍后将在授权技术部分中详细

 

讨论 J2EE 

 

安全性。不过,务必理解 J2EE 领域中的角色概念。关键要记住,J2EE 角色不

是一组人员。它们是特定于应用程序的逻辑名称,可以在部署时映射到用户和组。角色本