1 / 20
文档名称:

权限分配.doc

格式:doc   页数:20页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

权限分配.doc

上传人:xxj16588 2016/6/1 文件大小:0 KB

下载得到文件列表

权限分配.doc

相关文档

文档介绍

文档介绍:权限分配您还未登录! | 登录| 注册| 帮助首页业界移动云计算研发论坛博客下载更多 binyao02123202 的专栏目录视图摘要视图订阅. 新版论坛系列介绍之二——功能介绍篇 2012 门票社区团购火热开启! 公告: CSDN 博客频道博客搬家功能上线! 5 折票最后三天移动开发者大会没有重量只有质量: iPad 版《程序员杂志》应用上线“我最喜欢的技术博客”有奖推荐! 基于 Struts 2 ***实现细粒度的基于角色的权限认证实现. 分类: Web 开发 Java 2011-06-06 10:27 192 人阅读评论(0) 收藏举报 Apache Struts 作为最成功的 MVC Web 框架早已得到了广泛的应用, 但是其自身也暴露出不少缺点, 从而引出了 Struts 2。 Struts 2摒弃了原来 Struts 1 的设计, 而是转向了 webwork2 , 并结合 Struts 已有的优点, 试图打造出一个集众家所长的完美 Web 框架。 Struts 2 因此也具备 webwork2 中的一个非常重要的特性- ***(Interceptor) 。***会在 Action 执行之前和之后被执行( 如下图),是一种典型 AOP 实现。图 1. Struts 2 的体系结构 Struts 2 . ***以方便开发人员来实现存取控制。但该***的实现是建立在 J2EE 容器提供的存取控制机制之上的。容器提供的存取控制实现粒度较粗,往往无法满足多数应用的需求。在许多项目中, 用户所应该具有的权限是由多种因素而决定, 往往在不同的上下文中拥有不同的角色。例如在一个社交项目中,一个用户会在不同的社团里拥有不同的角色,如成员, 管理员, 来宾等。他的具体角色取决于当前所处社团的标识符。另外, 用户的角色还和他所要操作的资源类型有关。比如, 在这个社交站点中, 用户可以创建自己的日程表, 把这个日程表共享给其他用户或者委托给其他人管理。这样对日程表这种类型资源, 就会有创建者, 阅览者和管理者三种角色。在更复杂应用中, 用户的角色可能还会受更多因素决定, 这就要求存取控制要有更细的粒度, 能够处理更加复杂的逻辑。为了满足这个需求,在基于 Struts 2的 Web 应用开发中,我们也可以利用***来实现一个应用托管的基于角色的存取控制( RBAC, Role-Based Access Control ) 系统, 让其能够管理更细粒度的资源。该系统在 Struts 2 的配置文件中定义 Action 可以由那些角色来调用, 即对角色进行授权。***在 Action 调用之前, 对当前用户进行权限认证来决定 Action 是否应该被执行。下面我们就基于 Hibernate+Spring+Struts2 框架来完成这个系统的实现。为了使系统结构更加清晰易于维护, 我们将这个系统分为域模型层、持久层和服务层来实现。这种分层结构是目前 Web 开发广为使用的一种模式。模型层实现这系统中我们只需要一个实体 UserRole, 用来定义用户在不同的上下文中所具有的角色。在清单中, 我们使用了 Java Persistence API ( Hibernate 从 开始已经开始支持 JPA ) 中提供的 JDK 注解来对模型到数据库表之间的映射进行定义。清单 1. ***@Entity public class UserRole { private Long id; private User user; private String objectType; private Long objectId; private String role; public UserRole(Long userId, String role, String objectType, Long objectId) { User user = new User(); (userId); = user; = role; = objectType; = objectId; } ***@Id ***@GeneratedValue(strategy = ) public Long getId() { return id; } public void setId(Long id) { = id; } ***@ManyToOne ***@JoinColumn(name = "userId", nullable = false) pu