快速业务通道

基于Struts的权限实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

基于Struts的权限实现

时间:2011-01-18

一:概念介绍

1:)资源

可以使用的系统资源.比如注册用户是一种资源,修改用户信息也是一种资源.资源在系统中呈现为一棵树.假如用户管理是一个节点.用户注册,用户信息修改为用户管理的叶子。叶子具有不可分割性.

2:)角色

绑定可操作资源的集合。比如系统管理员,可以使用全部资源.一般用户,可以注册和修改查看自己的信息.角色可以有依赖角色。也就是说现在系统中存在RoleA,RoleB,RoleC ,RoleD 四种角色.

RoleD 倚赖RoleA

假设一个用户的角色是RoleD.

根据倚赖关系。默认有RoleA 的可使用资源.

3:)用户

系统中的使用者,因为角色可以倚赖,所以一个用户只有一种角色.

二:资源的分配

上述三个概念之间的绑定关系为用户绑定一个角色,角色绑定若干资源.角色绑定资源有两种绑定,一种是绑定叶子,一种绑定节点。绑定节点有两种一种只绑定节点下的叶子,一种绑定节点下所有的叶子.在系统中权限的分配需要做到一个角色可以访问整个资源树中的任意节点和叶子的组合.

三:资源树的构造

我们使用namespace的方式去构造一棵树.根节点为空。

下面形如:sysytem.user.useradd,system.department.add,system.common

上面的可以理解为system是一个节点,并有两个子节点user,department,

一个叶子common

四:Struts中的资源标识

在Struts中一个Action的配置通常如下:

<action path="/editSubscription" type="org.apache.struts.webapp.example.EditSubscriptionAction" attribute="subscriptionForm" scope="request" validate="false"> <forward name="failure" path="/mainMenu.jsp"/> <forward name="success" path="/subscription.jsp"/> </action>

基于Struts的权限实现(2)

时间:2011-01-18

为了使没一个Action绑定到一个跟节点下,我们加一个选项把上面的配置修改为

<action path="/editSubscription" type="org.apache.struts.webapp.example.EditSubscriptionAction" attribute="subscriptionForm" scope="request" rights="system.user" validate="false"> <forward name="failure" path="/mainMenu.jsp"/> <forward name="success" path="/subscription.jsp"/> </action>

为了在xml parse的时候可以加载上面的配置,我们需要修改一下Struts的源代码

修改org/apache/struts/config/ActionConfig

增加如下代码

protected String rights="common"; public String getRights(){ return this.rights; } public void setRights(String rights){ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.rights=rights; }

假如修改成功后我们把ActionMapping 打印出来会看到相关的配置

五:权限分配的实现

1:)实现角色资源的绑定

在我的实现中我使用xml文件去配置如下:

<role name="01"> <resource-list> <resource name="test" url="test.jsp" menu="false"/> <resource name="user" url="user.jsp" menu="true"/> <!--绑定绑定一个叶子--> </resource-list> <node-list> <node name="system.test" include="false"> <!--绑定绑定一个节点如果include为true绑定所有子叶子--> </node-list> </role>

2:)权限的判断

这一部分有很多中实现方式,一种所有的Action继承BaseAction

在BaseAction里面实现,并在没一个Action里面去调用判断.

另外一种交给Struts去判断

org.apache.struts.action.RequestProcessor

里面有一个processActionPerform

调用Action的execute去执行Action

我们可以修改processActionPerform让其在执行execute前先执行权限检查

如果是这样的话,必须修改org.apache.struts.action.Action

让一个方法去实现权限判断.

如果使用第二种需要修改蛮多源代码,不建议对Struts不熟悉的人使用.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号