分享
 
 
 

基于Struts的权限实现

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

一:概念介绍

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>

为了使没一个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不熟悉的人使用

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有