基 于 J2EE 平 台 的 可 配 置 权 限 系 统 的 设 计 与 实 现 张 齐 余 磊 华 南 理 工 大 学 计 算 机 科 学 与 工 程 学 院 广 州 510640 摘 要 在 研 究 RBAC 访 问 控 制 模 型 的 基 础 上, 设 计 了 一 种 可 配 置 的 权 限 管 理 系 统, 并 将 其 应 用 于 大 型 企 业 信 息 系 统 中 在 该 系 统 的 设 计 过 程 中, 详 细 讨 论 了 安 全 控 制 中 的 资 源 对 象 权 限 划 分 与 角 色 定 义, 并 引 入 了 组 织 结 构 业 务 流 程 和 应 用 分 类 等 概 念 对 RABC 基 本 模 型 进 行 扩 展 利 用 j2ee 平 台 的 优 点 以 及 acegi 框 架 在 权 限 控 制 方 面 的 既 有 成 果, 实 现 编 程 人 员 与 业 务 人 员 的 分 离, 通 过 对 资 源 符 的 操 作, 来 实 现 系 统 中 不 同 人 员 的 不 同 访 问 权 限 Software Platform and Application 关 键 词 RBAC;Acegi;J2EE; 权 限 控 制 ; 资 源 符 1 引 言 近 年 来, 信 息 系 统 的 迅 速 发 展, 越 来 越 多 的 企 业 倾 向 于 开 发 自 己 的 管 理 信 息 系 统, 而 其 人 员 与 组 织 架 构 的 复 杂 性 对 系 统 的 安 全 性 提 出 了 很 高 的 要 求, 信 息 系 统 的 数 据 安 全 也 越 来 越 受 到 人 们 的 重 视 随 着 Internet 技 术 的 迅 猛 发 展, 促 使 了 B/S 这 种 交 互 方 式 的 产 生, 并 被 广 泛 应 用 于 各 个 领 域 由 于 浏 览 器 的 引 入 及 其 自 身 的 特 殊 性, 需 要 新 的 方 式 来 实 现 权 限 管 理 同 时 在 开 放 源 代 码 运 动 的 推 动 下,Web 应 用 领 域 基 于 J2EE 体 系 的 应 用 框 架 层 出 不 穷, 其 中 不 乏 优 秀 的 没 计, 如 基 于 MVC 模 式 的 webwork, 处 理 持 续 层 的 Hibernate 以 及 服 务 于 所 有 层 面 的 Spring 等 为 了 防 止 未 经 授 权 的 用 户 访 问 系 统 中 的 重 要 信 息, 人 们 提 出 了 一 些 权 限 控 制 模 型 和 方 法, 比 较 成 熟 的 有 RBAC96(role-base access control 基 于 角 色 的 权 限 控 制 ) 和 ARBAC97(Administrator of RBAC 基 于 角 色 的 访 问 控 制 管 理 ) 授 权 模 型 [1,2], 其 主 要 思 想 是 系 统 管 理 员 根 据 内 部 的 实 际 需 要 建 立 角 色, 并 赋 予 角 色 一 定 的 权 力, 再 给 用 户 赋 予 一 定 的 角 色 [3] 这 些 模 型 能 有 效 保 证 数 据 的 安 全 性, 但 是 目 前 基 于 该 模 型 设 计 的 系 统 也 存 在 一 些 缺 陷, 它 只 能 进 行 粗 粒 度 权 限 管 理, 一 旦 业 务 变 化 将 很 难 维 护, 并 且 对 于 菜 单 的 显 示 和 隐 藏 等 操 作, 程 序 控 制 较 复 杂 为 有 效 地 解 决 目 前 存 在 的 问 题, 本 文 在 上 述 模 型 的 基 础 上, 通 过 分 析 多 种 框 架 的 优 劣, 设 计 一 种 基 于 J2EE 的 权 限 控 制 框 架, 并 实 现 了 一 个 可 扩 展 性 强 的, 易 于 使 用 的 权 限 管 理 系 统 该 系 统 在 前 台 引 入 一 种 在 显 示 菜 单 和 操 作 菜 单 方 面 比 较 优 秀 的 开 源 框 架 extremecomponents [4], 它 能 够 很 好 的 解 决 前 台 界 面 显 示, 并 且 对 于 编 程 方 面 也 会 变 的 极 其 简 单 在 系 统 的 整 体 设 计 中, 通 过 引 入 资 源 符 将 开 发 人 员 与 业 务 人 员 分 离, 从 而 使 得 整 2008 06 31
软 件 平 台 与 应 用 个 系 统 的 灵 活 性 和 可 扩 展 性 大 大 加 强 2 系 统 的 整 体 设 计 与 实 现 本 系 统 采 用 了 目 前 比 较 流 行 的 架 构,webwo rk [5] +extremecomponents+spring+hibernate, 其 中 webwork 和 extremecomponents 对 应 于 表 示 层, 在 这 一 层 当 中 结 合 了 jstl 标 签 库 及 自 定 义 的 标 签 库 Spring 对 应 于 业 务 层 方 面, 主 要 使 用 spring 中 的 ioc( 控 制 反 转 ) 功 能 及 aop( 面 向 方 面 的 编 程 ), 并 使 用 其 中 的 acegi 安 全 框 架 [6] 它 使 用 了 Spring 的 方 式 提 供 了 安 全 和 认 证 安 全 服 务, 包 括 使 用 Bean Context, 拦 截 器 和 面 向 接 口 的 编 程 方 式 因 此,Acegi 安 全 系 统 能 够 轻 松 地 适 用 于 复 杂 的 安 全 需 求 Hibernate 为 持 久 化 层, 它 通 过 配 置 文 件 (hibernate.properties 或 hibernate.cfg. xml) 和 映 射 文 件 (***.hbm.xml) 把 JAVA 对 象 或 PO(Persistent Object, 持 久 化 对 象 ) 映 射 到 关 系 数 据 库 中 的 表, 建 立 对 象 关 系 映 射, 然 后 通 过 操 作 PO, 对 数 据 表 中 的 数 据 进 行 增, 删, 改, 查 等 操 作 [7] 本 系 统 采 用 面 向 接 口 的 编 程 方 式, 使 得 设 计 与 实 现 分 离, 既 便 于 团 队 协 作 开 发, 又 有 很 好 的 扩 展 性, 再 结 合 设 计 模 式 中 的 工 厂 模 式 和 单 例 模 式, 这 样 整 个 系 统 在 设 计 方 面 就 具 有 很 大 的 灵 活 性 见 图 1 方 式, 可 以 在 配 置 文 件 中 配 置 或 存 放 在 关 系 数 据 库 然 而,Acegi 本 身 对 权 限 表 的 设 计 非 常 简 单,users 表 {username,password,enabled} 和 authorities 表 {username,authority}, 这 样 简 单 的 设 计 肯 定 无 法 适 用 复 杂 的 权 限 需 求 [8] 为 了 解 决 本 系 统 对 权 限 方 面 的 要 求, 结 合 了 RBAC 思 想, 引 入 role( 角 色 ) 的 概 念, 使 得 用 户 和 权 限 分 离, 一 个 用 户 拥 有 多 个 角 色, 一 个 角 色 拥 有 多 个 相 应 的 权 限 同 时, 为 了 更 好 地 配 合 Acegi 安 全 框 架, 还 引 入 resource( 资 源 ) 的 概 念, 资 源 可 分 为 URL 和 FUNCTION( 方 法 ) 两 种, 一 个 权 限 可 以 对 应 多 个 资 源 整 个 权 限 系 统 中 数 据 库 部 分 包 括 9 个 表 : 分 别 为 角 色 表, 角 色 权 限 表, 权 限 表, 权 限 资 源 表, 资 源 表, 人 员 角 色 表, 人 员 表, 部 门 表, 应 用 类 别 表 其 中 应 用 类 别 表 可 以 进 行 扩 展, 如 : 采 用 jbpm 框 架 的 流 程 管 理 的 流 程 定 义 文 件 管 理 表, 还 可 以 建 立 主 题 查 询 表 等 等 具 体 的 数 据 库 设 计 见 图 2 图 1 系 统 整 体 架 构 图 2.1 Acegi 安 全 框 架 的 应 用 Acegi 框 架 中 支 持 多 种 安 全 信 息 的 持 久 化 图 2 数 据 库 设 计 2.2 认 证 管 理 器, 授 权 管 理 器 的 配 置 实 现 系 统 的 安 全 控 制, 首 先 需 要 对 系 统 的 安 全 管 理 器 和 授 权 管 理 器 进 行 配 置, 系 统 进 行 认 证 和 授 权 需 要 获 取 安 全 信 息,Acegi 本 身 提 供 了 对 认 证 信 息 的 获 取 机 制, 在 实 现 认 证 与 授 权 过 程 中, 系 统 将 主 动 根 据 配 制 信 息 和 相 应 的 信 息 解 释 安 全 信 息 的 读 取 图 3 给 出 了 一 个 将 用 户 安 全 信 息 存 储 32 信 息 通 信 技 术
在 数 据 库 中 的 认 证 管 理 器 的 配 置 示 意 图 Acegi 本 身 提 供 的 实 例 并 不 能 满 足 大 规 模 的 复 杂 的 图 3 认 证 管 理 器 配 制 示 意 图 1) 配 置 数 据 库 datasource 和 Acegi 的 jdbcdao 2) 配 置 用 户 信 息 的 加 密 算 法 3) 配 置 缓 存 有 效 时 间 4) 配 置 daoauthenticationprovider 5) 配 置 认 证 管 理 器 授 权 管 理 器 的 配 置 方 法 与 认 证 管 理 器 的 配 置 基 本 类 似, 这 里 不 再 讨 论 2.3 安 全 请 求 拦 截 器 的 配 置 以 上 配 置 完 成 后, 就 需 要 配 置 安 全 拦 截 器 不 同 的 安 全 管 理 对 象 需 要 使 用 不 同 的 安 全 拦 截 器 对 于 方 法 级 的 安 全 认 证 需 要 使 用 的 拦 截 器 为 MethodSecurityInterceptor, 而 应 用 于 URL 资 源 的 安 全 拦 截 器 为 FilterSecurityInterceptor 其 中,MethodSecurityInterceptor 拦 截 器 是 借 助 于 Spring Aop 实 现 的, 而 FilterSecurityInterceptor 拦 截 器 是 借 助 于 ServletFilter 实 现 的 本 文 以 URL 资 源 请 求 的 安 全 拦 截 器 为 例 说 明 配 置 情 况 由 于 URL 资 源 请 求 安 全 拦 截 是 借 助 于 过 滤 器 进 行 的 因 此 首 先 要 配 置 Acegi Servlet 过 滤 器 过 滤 器 类 似 于 AOPAround 装 备, 实 现 在 web 资 源 调 用 前 后 进 行 的 一 些 操 作 6 种 过 滤 器, 他 们 依 次 构 成 Servlet 过 滤 器 链, 依 次 处 理 客 户 请 求 需 要 注 意 的 是 过 滤 器 配 置 的 顺 序 是 不 能 交 换 的, 当 不 需 要 使 用 某 个 过 滤 器 时, 可 直 接 将 其 删 除 和 注 释 Acegi 提 供 了 对 Spring 应 用 安 全 的 支 持, 然 而 权 限 需 求, 本 文 通 过 扩 展 Acegi 的 数 据 库 设 计 即 可 满 足 复 杂 的 权 限 需 求 [9] 2.4 通 过 自 定 义 标 签 控 制 页 面 的 显 示 1) 建 立 后 台 的 java 文 件 public class AuthorizeTag extends TagSupport { //res 表 示 属 于 特 定 用 户 的 资 源 ; // 返 回 1 表 示 拥 有 权 限, 同 时 页 面 上 显 示 ; // 返 回 0 表 示 没 有 权 限, 不 显 示 ; public int dostarttag() throws JspException { Log.debug((new StringBuilder()).append(" 当 前 资 源 串 :").append(res).tostring()); boolean hasauth = AuthUtils.hasAuthorize(pageContext, res); return hasauth? 1 : 0; }. } 2) 建 立 mip.tld 文 件, 可 以 自 己 扩 展 <? x m l v e r s i o n = " 1. 0 " encoding="utf-8"?> uri> <taglib> <short-name>mip</short-name> <uri>http://www.mip.org.cn/taglibs</ <tag> <name>auth</name> <!-- 与 标 签 相 关 的 java 类 --> <tag-class> AuthorizeTag</tag-class> <attribute> <name>res</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> Software Platform and Application 2008 06 33
</tag> 资 源 名 称, 资 源 类 型 选 项 中 有 3 种 类 别 分 别 为 : </taglib> component function url 三 个 Component 为 3) 在 每 个 jsp 文 件 中 引 入 此 标 签 库 对 应 模 块 的 功 能 部 分, 如 : 新 增, 保 存, 删 除 等 <%@ taglib prefix="mip" uri="/mip.tld" 等 Function 为 对 应 的 某 个 函 数 功 能 名,url 为 对 软 件 平 台 与 应 用 %> 使 用 以 下 的 结 构 来 进 行 页 面 的 权 限 控 制 <c:if test="${showbut eq 1}"> <mip:auth res="sysconfig.save_dept"> 应 的 url 路 径 后 面 的 action <img border="0" src="<c:url value="${portal_img_path}/ named_button/save.gif"/>" alt=" 保 存 " style="cursor:hand" onclick="save()" > </mip:auth> </c:if> 结 合 jstl 标 签, 可 以 使 页 面 上 的 控 制 更 加 灵 活 到 这 个 步 骤, 就 可 以 控 制 当 前 用 户 是 否 有 权 图 5 资 源 表 图 3) 配 置 权 限 表 如 图 6 所 示, 可 以 设 置 权 限 名 称, 也 就 是 权 限 资 源 符, 一 般 采 用 AHTU_**_** 来 标 识, 操 作 名 称 一 般 采 用 中 文 来 标 示 如 :*** 模 块 管 理 限 来 管 理 数 据 信 息 2.5 配 置 权 限 角 色 资 源 ( 供 业 务 人 员 使 用 ) 1) 配 置 应 用 分 类 表 如 图 4 所 示, 左 边 为 系 统 中 的 所 涉 及 的 业 务 模 块, 可 以 无 限 的 向 下 扩 展 右 边 为 业 务 模 块 的 详 细 信 息 包 括 : 模 块 名, 父 级 模 块 名, 排 序 号, 模 块 编 码, 上 传 文 件 的 大 小, 类 型 等 等 图 6 权 限 表 图 4) 配 置 权 限 资 源 关 系 表 在 权 限 表 的 后 面 加 一 个 字 段, 通 过 这 个 字 段 来 选 择 权 限 所 对 应 的 资 源, 可 以 通 过 可 视 化 的 界 面 来 选 择 5) 配 置 系 统 中 的 组 织 架 构 信 息 左 边 以 树 型 结 构 显 示 数 据 库 中 部 门 表 的 数 据, 如 : 一 个 部 门 是 一 级 部 门 还 是 二 级 部 门, 是 否 有 其 子 部 门 等 等, 右 边 就 是 对 应 部 门 的 详 细 信 息 6) 配 置 系 统 中 的 人 员 信 息 图 4 应 用 分 类 图 2) 配 置 资 源 表 如 图 5 所 示, 左 边 为 系 统 中 的 所 涉 及 的 业 务 模 块, 可 以 无 限 的 向 下 扩 展. 右 边 为 业 务 模 块 的 资 源 管 理, 其 中 资 源 名 称 为 jsp 页 面 中 设 置 的 根 据 组 织 架 构 中 的 某 一 特 定 的 部 门 来 配 置 其 所 管 辖 的 人 员 信 息, 如 : 增 加, 删 除, 修 改 等 等 7) 配 置 系 统 中 的 角 色 信 息 根 据 组 织 架 构 中 的 某 一 特 定 的 部 门 来 配 置 34 信 息 通 信 技 术
其 所 管 辖 的 角 色 信 息, 如 : 增 加, 删 除, 修 改 等 Models[J],Computer IEEE,1996,29(2):38- 等 47 8) 配 置 系 统 中 角 色 对 应 的 权 限 信 息 [2] Moyer M J.Generalized Role-based 在 角 色 信 息 表 后 加 一 个 字 段, 通 过 这 个 字 段 Access Control[C].21th IEEE International 来 选 择 角 色 所 对 应 的 权 限 信 息, 也 就 是 从 权 限 资 源 表 当 中 获 取 9) 配 置 系 统 中 的 人 员 角 色 关 系 表 在 人 员 表 的 后 面 加 一 个 字 段, 通 过 这 个 字 段 来 选 择 人 员 所 对 应 的 角 色, 可 以 通 过 可 视 化 的 界 面 来 选 择 通 过 以 上 的 步 骤, 在 不 同 的 企 业 中, 业 务 人 员 就 能 很 好 的 配 置 企 业 的 各 个 部 门, 每 个 部 门 中 人 员 所 对 应 的 权 限 [3] [4] [5] Conference on Distributed Computing, Sydney,Australia,2001:67-68 张 组 平, 王 磊. 基 于 多 种 模 式 的 权 限 控 制 技 术 研 究 [J]. 计 算 机 工 程,2006,32(1) extremecomponents 中 文 手 册. http://extremecomponents.org/wiki/ index.php/simplified_chinese_reference Patrick,Lightbody.WebWork in Action. 北 京 : 电 子 工 业 出 版 社 2006,11 Software Platform and Application [6] 罗 时 飞. 精 通 Spring. 电 子 工 业 出 版 社,2005.04 3 总 结 [7] 孙 卫 琴. 精 通 Hibernate:Java 对 象 持 久 化 技 术 本 文 通 过 融 合 多 种 开 源 框 架, 设 计 权 限 管 详 解 [M]. 北 京 : 电 子 工 业 出 版 社,2005 理 系 统 的 整 体 架 构, 它 将 编 程 人 员 与 业 务 人 员 分 [8] 实 战 Acegi: 使 用 Acegi 作 为 基 于 离, 编 程 人 员 专 注 于 代 码 的 编 写, 业 务 人 员 则 配 Spring 框 架 的 WEB 应 用 的 安 全 框 架 置 相 应 人 员 的 权 限 资 源 符 这 样 就 将 企 业 资 源 进 http://www.blogjava.net/youlq/ 行 了 合 理 的 分 配, 提 高 了 工 作 效 率, 增 强 了 系 统 archive/2006/05/10/22678.html#45497 的 安 全 性, 并 具 备 较 强 的 可 扩 展 性 [9] 何 知 军, 鲁 怀 伟, 陈 松 考. 基 于 J2EE 的 B/S 系 统 的 权 限 控 制 设 计 [A]. 兰 州 交 通 大 学 学 参 考 文 献 报.2007,8:106-108 [1] Sandhu R S.Role-based Access Control 2008 06 35
作 者 简 历 张 齐 华 南 理 工 大 学 计 算 机 科 学 与 工 程 学 院, 副 教 授 软 件 平 台 与 应 用 余 磊 华 南 理 工 大 学 计 算 机 科 学 与 工 程 学 院, 硕 士 The Design and Implementation of Configurable Privilege Management Systme Based on J2EE Platform Zhang Qi Yu Lei School of Computer Science and Engineering, South China University of Technology, Guangdong 510640, China Abstract A privilege management system, which is used in large-scale enterprise information system, is designed based on the study of RBAC access and control model. In the design works of this system, it discusses the object in the security control of resources, the competence of privilege, and the role of competence defined in detail. The design also introduces the concept such as organizational structure, business processes and application categories which can expand the basic model of RABC. The paper realizes the separation of programming staff and operational staff by making use of the advantage of J2EE platform and the existing achievements of Acegi framework in the respect of privilege control. And it achieves different access privilege of different person in the system through the operation of the resources symbol. Keywords RBAC; Acegi; J2EE; Privilege Control; Resources 36 信 息 通 信 技 术