分享
 
 
 

基于struts项目权限解决方案的探索

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

基于struts项目权限解决方案的探索

前一段时间我曾专门阅读过一些关于JAAS的资料,网上这方面的资料不多,篇篇文章都是侧重于讲述一些核心的JAAS类(不过讲的蛮不错的,呵呵。。。对于这方面的入门极好),而对于应用方面给我的感觉就像:

“天啊,几乎没有人用到它~!”

还好chinaxp论坛的源代码中涉及了这方面的应用,而且它们就是那样做的,这其中给了我不少启示。

目前在我参与的一个项目(正在开发)中,我采用JAAS的验证机制(其中的授权部分因为没有非常熟悉的掌握所以暂时没有采用,而暂时采用另外一种方法来解决,这种方法再接下来的部分涉及。)

先说一些我以其为背景的这个项目:

它算是一个比较大的项目(省级高速公路路政工作平台),大的划分可以分为10个大模块26个子模块,具体分为基本信息维护、路政案件、路政审批等等大模块;权限主要是(对某一模块的维护、浏览以及打印等)

经过讨论我们在设计权限的时候是这样考虑的:

分为三个“角色”:用户、用户组、权限;

他们的关系为:用户属于某个用户组;权限下放到用户组。(这一切都是和“当场客户代表”共同讨论决定的。)

如下表是权限的内容:

rightID

rightName

00100

维护基本信息

00101

浏览基本信息

00500

维护路产信息

00501

浏览路产信息

……

……

其中系统模块用xml配置,如:

module_config.xml

<?xml version="1.0" encoding="UTF-8"?>

<module-config>

<module>

<name>维护基本信息</name>

<right>00100</right>

</module>

<module>

<name>维护路产信息</name>

<right>00500</right>

</module>

……

</module-config>

(采用单例模式在容器启动的时候进行解析)

把具体的权限绑定到每一个*.do请求:

request_source.xml

<?xml version="1.0" encoding="UTF-8"?>

<request_source>

<request>

<url>useradmin.do</url>

<desc>显示用户信息维护主页面</desc>

<right>00100</right>

</request>

……

</request_source>

(也是在容器启动的时候解析并放到容器中)

系统中权限流程控制基本上我把它分为两个步骤:

1. 利用filter以及JAAS来进行非法用户的过滤

其中所有的*.JSP也要通过*.do来引导,这样就能确保整个系统中没有权限“盲点”,也即可以保证每一个*.do都是“干净的”。

这其中涉及到以下几个文件,具体的代码在此不给出:

(1)iRoadLogin.config

IRoadLogin{

com.ifreeway.iroad.security.DataBaseLoginModule required debug=true;

};

这个文件在创建LoginContext对象的时候根据这个文件来确定该加载哪个LoginModule对象。

(2)ParseRequestFilter.java

对每一个请求进行非法用户的过滤。

(3)DataBaseLoginModule.java

(4)SimpleCallbackHandler.java

上边的几个类的介绍涉及过多的JAAS核心类的内容,建议阅读下面连接的内容:

http://www.yesky.com/20030114/1648365.shtml这篇文章对于你了解JAAS绝对有帮助,你也可以通过我的站点来阅读更多的JAAS资料: http://plateau.sicool.com

2. 2. 在确保是合法用户(已经通过1。的过滤的用户)请求*.do的时候再来判断该用户是否拥有请求该do的权利。

可以在每个action的父类BaseAction中创建一个方法来判断是否合法,如:

public Boolean validateRight(String _request_do) throws ErrorRequestException{

//取得user所在的组:a

//根据_request_do,假设其为:useradmin.do

//获得其所在的组:b

//然后根据两次组(a 和 b)是否是同一组来判断该请求是否合法

//此时的a和b都是很容易在容器中获得的,不会损失效能。

}

前提:项目中的又一个公共的BaseAction,其他的action都要继承它。这一点我想使用struts开发项目的开发员都是很容易理解的。

如:有一个UserAdminAction.java

那么在这个执行它的时候首先调用validateRight(“useradmin.do”)来进行权限判断,如果返回false,那么跳转到error页。

其实我上边所写出的解决方法在我现在的项目中是够用的。是谁说过:“够用为原则”?项目的权限设计这部分实在是个非常大的讨论题目,这里算是抛砖引玉,希望给你一点提示,也希望你可以给我一些更好方法的提示,你可以通过plateau_t@sina.com和我联系,也可以访问我的站点(http://plateau.sicool.com)给我留言。

Jplateau 2003年10月20日星期一 精博

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有