国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

基于Struts的權(quán)限實(shí)現(xiàn)

2019-11-18 12:56:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  作者:孤魂一笑  
  
  
  一:概念介紹
  
  1:)資源
  可以使用的系統(tǒng)資源.比如注冊(cè)用戶是一種資源,修改用戶信息也是一種資源.
  資源在系統(tǒng)中呈現(xiàn)為一棵樹(shù).假如用戶治理是一個(gè)節(jié)點(diǎn).用戶注冊(cè),用戶信息
  修改為用戶治理的葉子。葉子具有不可分割性.
  
  2:)角色
  綁定可操作資源的集合。
  比如系統(tǒng)治理員,可以使用全部資源.
  一般用戶,可以注冊(cè)和修改查看自己的信息.
  角色可以有依靠角色。也就是說(shuō)現(xiàn)在系統(tǒng)中存在
  RoleA,RoleB,RoleC ,RoleD 四種角色.
  RoleD 倚賴RoleA
  假設(shè)一個(gè)用戶的角色是RoleD.
  根據(jù)倚賴關(guān)系。默認(rèn)有RoleA 的可使用資源.
  
  3:)用戶
  系統(tǒng)中的使用者,因?yàn)榻巧梢砸匈嚕砸粋€(gè)用戶只有一種角色.
  
  二:資源的分配
  
  上述三個(gè)概念之間的綁定關(guān)系為用戶綁定一個(gè)角色,角色綁定若干資源.
  角色綁定資源有兩種綁定,一種是綁定葉子,一種綁定節(jié)點(diǎn)。綁定節(jié)點(diǎn)有
  兩種一種只綁定節(jié)點(diǎn)下的葉子,一種綁定節(jié)點(diǎn)下所有的葉子.在系統(tǒng)中權(quán)
  限的分配需要做到一個(gè)角色可以訪問(wèn)整個(gè)資源樹(shù)中的任意節(jié)點(diǎn)和葉子的組合.
  
  三:資源樹(shù)的構(gòu)造
  
  我們使用namespace的方式去構(gòu)造一棵樹(shù).根節(jié)點(diǎn)為空。
  下面形如:sysytem.user.useradd,system.department.add,system.common
  上面的可以理解為system是一個(gè)節(jié)點(diǎn),并有兩個(gè)子節(jié)點(diǎn)user,department,
  一個(gè)葉子common
  
  四:Struts中的資源標(biāo)識(shí)
  
  在Struts中一個(gè)Action的配置通常如下:
  
  <action path="/editSubscr  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>
  
  為了使沒(méi)一個(gè)Action綁定到一個(gè)跟節(jié)點(diǎn)下,我們加一個(gè)選項(xiàng)把上面的配置修改為
  <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的時(shí)候可以加載上面的配置,我們需要修改一下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 打印出來(lái)會(huì)看到相關(guān)的配置
  
  五:權(quán)限分配的實(shí)現(xiàn)
  
  1:)實(shí)現(xiàn)角色資源的綁定
  在我的實(shí)現(xiàn)中我使用xml文件去配置如下:
  <role name="01">
  <resource-list>
  <resource name="test" url="test.jsp" menu="false"/>
  <resource name="user" url="user.jsp" menu="true"/>
  <!--綁定綁定一個(gè)葉子-->
  </resource-list>
  <node-list>
  <node name="system.test" include="false">
  <!--綁定綁定一個(gè)節(jié)點(diǎn)假如include為true綁定所有子葉子-->
  </node-list>
  </role>
  
  2:)權(quán)限的判定
  這一部分有很多中實(shí)現(xiàn)方式,一種所有的Action繼續(xù)BaseAction
  在BaseAction里面實(shí)現(xiàn),并在沒(méi)一個(gè)Action里面去調(diào)用判定.
  
  另外一種交給Struts去判定
  org.apache.struts.action.RequestProcessor
  里面有一個(gè)processActionPerform
  調(diào)用Action的execute去執(zhí)行Action
  我們可以修改processActionPerform讓其在執(zhí)行execute前先執(zhí)行權(quán)限檢查
  假如是這樣的話,必須修改org.apache.struts.action.Action
  讓一個(gè)方法去實(shí)現(xiàn)權(quán)限判定.
  
  假如使用第二種需要修改蠻多源代碼,不建議對(duì)Struts不熟悉的人使用

上一篇:Struts Layout

下一篇:安裝Struts需要的軟件

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 遂溪县| 建水县| 贵南县| 莱西市| 开江县| 会东县| 拜城县| 和静县| 集安市| 岚皋县| 顺昌县| 铅山县| 贵港市| 大方县| 蚌埠市| 无锡市| 南汇区| 清新县| 上林县| 铁岭县| 浪卡子县| 福安市| 阳原县| 安龙县| 大荔县| 融水| 大洼县| 绥中县| 伊春市| 广平县| 田林县| 桐城市| 瑞昌市| 潼南县| 蕉岭县| 广德县| 海口市| 禄劝| 沙洋县| 石棉县| 桂东县|