基于Struts的权限实现

2016-02-19 15:00 1 1 收藏

下面图老师小编要向大家介绍下基于Struts的权限实现,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

【 tulaoshi.com - 编程语言 】

  一:概念介绍

  1:)资源

  可以使用的系统资源.比如注册用户是一种资源,修改用户信息也是一种资源.

  资源在系统中呈现为一棵树.假如用户管理是一个节点.用户注册,用户信息

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  修改为用户管理的叶子。叶子具有不可分割性.

  2:)角色

  绑定可操作资源的集合。

  比如系统管理员,可以使用全部资源.

  一般用户,可以注册和修改查看自己的信息.

  角色可以有依赖角色。也就是说现在系统中存在

  RoleA,RoleB,RoleC ,RoleD 四种角色.

  RoleD 倚赖RoleA

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  假设一个用户的角色是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不熟悉的人使用.

来源:https://www.tulaoshi.com/n/20160219/1608599.html

延伸阅读
Struts 和 Tiles 辅助基于组件的开发(5) Struts 和 Tiles 更复杂的使用 篇幅所限,不答应我再深入讨论 Struts 和 Tiles 包其它一些实用的方面,但我真的想简要地谈一下,这样您可以对 Struts 和 Tiles 可以做些什么有所了解。假如有足够的需求,可能这些内容会是将来文章的主题。 您会在本文的两个示例中注重到,我编码了名...
     Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。              &nb...
标签: Web开发
script     //设一个变量     var XMLHttpReq=false;    //创建一个XMLHttpRequest对象    function createXMLHttpRequest(){      if(window.XMLHttpRequest){ //Mozilla       XMLHttpReq=new XMLHttpReques...
标签: Java JAVA基础
一、AOP编程概览 面向对象编程技术进入软件开发的主流对软件的开发方式产生了极大的影响,开发者可以用一组实体以及这些实体之间的关系将系统形象地表示出来,这使得他们能够设计出规模更大、更复杂的系统,开发周期也比以前更短。OO开发的唯一问题是,它本质上是静态的,需求的细微变化就可能对开发进度造成重大影响。...
       基于Linux的目录服务实现   · 魏星 王舒晟·CPCW      摘要:       本文的目的是通过使用Linux系统支持的应用软件包(openldap),快速实现基于LDAP协议的目录服务系统来支持Windows消息簿中的用户查询功能。作者从用户的观点介绍了目录服...

经验教程

842

收藏

99
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部