posts - 14,  comments - 37,  trackbacks - 0
           

          1.       struts-menu Permissions

           

          1.1.       背景

           

          PermissionsAdapter接口,在菜單框架中定義可插入的適配器,該適配器原來(lái)校驗(yàn)對(duì)菜單的訪問(wèn)。接口中只有一個(gè)方法:public boolean isAllowed(MenuComponent menu),參數(shù)是menu-config.xml文件中定義的一個(gè)菜單(Menu)或菜單項(xiàng)(Item),該方法判斷該菜單是否允許被顯示。

          在顯示菜單的時(shí)候,每個(gè)菜單或菜單項(xiàng)都要作為參數(shù)調(diào)用isAllowed方法,如果返回true就顯示該菜單,否則就不顯示菜單。

          Struts-menu項(xiàng)目中內(nèi)置有類RolesPermissionsAdapter實(shí)現(xiàn)了PermissionsAdapter接口。該適配器在容器管理安全性是被用來(lái)進(jìn)行菜單訪問(wèn)的驗(yàn)證,將web.xml文件中定義的用戶安全角色映射到menu-config.xml文件中設(shè)置的菜單/菜單項(xiàng)允許訪問(wèn)角色列表。其中的角色是在。

          1.2.       步驟0

           

          該步驟通常是J2EE/JAAS等安全配置的一部分。為每個(gè)用戶或用戶組分配角色。角色是在web.xml文件中定義的。

          1.3.       步驟1:為菜單定義PermissionsAdapter

           

          用來(lái)顯示菜單的JSP標(biāo)記<menu:useMenuDisplayer/>標(biāo)記中有一個(gè)可選的屬性:permissions。如果設(shè)置了該屬性,該屬性值就作為名字,在application/request/session/page域內(nèi)查找PermissionsAdapter的對(duì)象。然后將找到的適配器應(yīng)用到菜單的顯示中。

          值得注意的是,在permissions的屬性值中有一個(gè)值是特殊處理的――rolesAdapter。如果設(shè)置了permissions="rolesAdapter",就說(shuō)明在驗(yàn)證菜單是否顯示的過(guò)程中,不是在application/request/session/page域中查找適配器,而是創(chuàng)建并使用新的RolesPermissionsAdapter對(duì)象。這樣就只需要在<menu:useMenuDisplayer/>標(biāo)記中添加屬性permissions="rolesAdapter",而無(wú)需定義自己的PermissionsAdapter實(shí)現(xiàn)。

          1.4.       步驟2:將角色映射到menu-config.xml中的菜單/菜單項(xiàng)

           

          menu-config.xml文件中的<Menu/><Item/>標(biāo)記有一個(gè)可選的屬性:roles。該屬性在與RolesPermissionsAdapter聯(lián)合使用的時(shí)候,其值是所有可以看到該菜單/菜單項(xiàng)的角色列表,角色之間以空格分隔。

          RolesPermissionsAdapter對(duì)象會(huì)根據(jù)空格從角色列表中取得各個(gè)角色,并為每個(gè)角色調(diào)用request.isUserInRole()方法。對(duì)于調(diào)用返回true的角色,就顯示對(duì)應(yīng)的菜單/菜單項(xiàng)。

           

           

           

          例如,在menu-config.xml文件中配置如下:

          <Menu name="PrefsMenu" title="Preferences" roles="User">

              <Item name="UserPrefs" title="User Preferences" page="prefs.do"/>

              <Item name="ModPrefs" title="Moderator Preferences"

                       page="modPrefs.do" roles="Moderator System"/>

              <Item name="AdminPrefs" title="Site Preferences"

                       page="sitePrefs.do" roles="System"/>

          </Menu>

          說(shuō)明:任何User角色的用戶都能夠看到該菜單,也就是自動(dòng)看到User Preferences菜單項(xiàng)。只有ModeratorSystem角色的用戶才能看到Moderator Preferences菜單項(xiàng)。而只有System角色的用戶才能夠看到Site Preferences菜單項(xiàng)。

          當(dāng)然,用戶看不到不等于沒(méi)有權(quán)限訪問(wèn),用戶可以直接輸入連接進(jìn)行訪問(wèn)。因此要避免非法訪問(wèn),還要進(jìn)行必要的安全措施。

          1.5.       示例(rolesMenu.jsp

           

          1.5.1.      menu-struts.xml文件中

           

              <Menu name="Permissions" title="Permissions" roles="tomcat,role1">

                  <Item title="Change" location="permissionsForm.jsp"/>

          </Menu>

          roles屬性給出了兩個(gè)能夠看到該菜單的角色:tomcat,role1

          1.5.2.      JSP頁(yè)面中

           

          <menu:useMenuDisplayer name="ListMenu"

              bundle="org.apache.struts.action.MESSAGE"

              permissions="rolesAdapter">

              <menu:displayMenu name="ToDoListMenuFile"/>

              <menu:displayMenu name="ToDoListMenuEdit"/>

              <menu:displayMenu name="Permissions"/>

          </menu:useMenuDisplayer>

          給出permissions屬性,表示顯示的菜單要進(jìn)行角色的驗(yàn)證

          posted on 2007-07-11 10:13 冰封的愛(ài) 閱讀(151) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 萨迦县| 牙克石市| 青神县| 中江县| 西和县| 乌拉特后旗| 镇赉县| 巨野县| 阜新市| 宁德市| 嘉义县| 松阳县| 麻阳| 清徐县| 祥云县| 保山市| 高阳县| 米泉市| 岐山县| 镇原县| 申扎县| 康马县| 同江市| 墨竹工卡县| 东方市| 舟曲县| 交城县| 灵丘县| 宝应县| 温宿县| 依安县| 炎陵县| 贵定县| 西吉县| 怀集县| 广州市| 茶陵县| 靖边县| 宜宾县| 武城县| 镶黄旗|