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

原创 2003年10月22日 11:20:00

基于struts项目权限解决方案的探索<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

       前一段时间我曾专门阅读过一些关于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)是否是同一组来判断该请求是否合法

 

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

}

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

如:有一个UserAdminAction.java

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

 

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

 

Jplateau 20031020日星期一 精博

若要转换此解决方案,请将此解决方案文件的权限更改为允许修改,然后重新打开它。

 今天用VS2005运行了个VS2003的程序,在转换过程中出现错误,显示如下:...... 无法转换解决方案文件“*.sln”,因为无法修改它。若要转换此解决方案,请将此解决方案文件的权限更改为允许...
  • Purba
  • Purba
  • 2007年12月04日 22:10
  • 1353

struts2(一)---编写第一个struts2项目

转载请注明:http://blog.csdn.net/uniquewonderq 1.在myeclipse中创建一个webProject名为Struts 2.导入Struts核心包。将核心包复制到/...
  • uniquewonderq
  • uniquewonderq
  • 2015年07月09日 11:13
  • 1257

小项目:基于Struts框架的员工管理系统的java实现

1.导入struts包 c3p0-0.9.1.2.jar commons-beanutils-1.8.3.jar commons-dbutils-1.6.jar commons-fileupload...
  • qq_32261399
  • qq_32261399
  • 2017年09月05日 10:20
  • 154

Jenkins配置基于角色的项目权限管理

本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理。 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role S...
  • tiankefeng19850520
  • tiankefeng19850520
  • 2015年01月24日 23:51
  • 3233

Rattle :基于R的数据挖掘工具(4a):探索数据

在建立模型之前,可以通过数据探索分析(exploratory data analysis,EDA)来获得关于数据的深刻认识。数据探索可以帮助我们了解数据的形状,数据的边界(最值),数值特性和散布程度,...
  • dingji_ping
  • dingji_ping
  • 2014年11月20日 21:33
  • 989

基于Struts权限实现

一:概念介绍  1:)资源  可以使用的系统资源.比如注册用户是一种资源,修改用户信息也是一种资源.资源在系统中呈现为一棵树.假如用户管理是一个节点.用户注册,用户信息修改为用户管理的叶子。叶子具有不...
  • woshisap
  • woshisap
  • 2011年06月14日 15:40
  • 796

struts2基于注解的配置Demo

应同学要求,给找个Struts2基于注解的小例子,本以为网上有好多,结果她说不好用,我自己毕业后就没用过Struts了,试着在网上找了一些,果然项目都不能很好的运行,于是决心自己写个小Demo,也算给...
  • xiaokailele
  • xiaokailele
  • 2015年09月17日 20:52
  • 1211

Jenkins用户权限和角色配置

本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理。 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role St...
  • liudinglong1989
  • liudinglong1989
  • 2017年12月20日 20:52
  • 35

基于Struts的权限实现 .

一:概念介绍 1:)资源 可以使用的系统资源.比如注册用户是一种资源,修改用户信息也是一种资源. 资源在系统中呈现为一棵树.假如用户管理是一个节点.用户注册,用户信息 修改为用户管理的叶...
  • guolin6315
  • guolin6315
  • 2011年09月10日 16:56
  • 235

基于Struts的权限实现

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月23日 23:10
  • 112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于struts项目权限解决方案的探索
举报原因:
原因补充:

(最多只允许输入30个字)