Struts Menu中基于角色的權(quán)限管理
1.struts-menu Permissions 1.1. 背景 PermissionsAdapter接口,在菜單框架中定義可插入的適配器,,該適配器原來校驗(yà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接口,。該適配器在容器管理安全性是被用來進(jìn)行菜單訪問的驗(yàn)證,,將web.xml文件中定義的用戶安全角色映射到menu-config.xml文件中設(shè)置的菜單/菜單項(xiàng)允許訪問角色列表,。其中的角色是在。 1.2. 步驟0 該步驟通常是J2EE/JAAS等安全配置的一部分,。為每個(gè)用戶或用戶組分配角色,。角色是在web.xml文件中定義的。 1.3. 步驟1:為菜單定義PermissionsAdapter 用來顯示菜單的JSP標(biāo)記<menu:useMenuDisplayer/>標(biāo)記中有一個(gè)可選的屬性:permissions,。如果設(shè)置了該屬性,,該屬性值就作為名字,在application/request/session/page域內(nèi)查找PermissionsAdapter的對象,。然后將找到的適配器應(yīng)用到菜單的顯示中,。 值得注意的是,在permissions的屬性值中有一個(gè)值是特殊處理的――rolesAdapter,。如果設(shè)置了permissions="rolesAdapter",,就說明在驗(yàn)證菜單是否顯示的過程中,不是在application/request/session/page域中查找適配器,,而是創(chuàng)建并使用新的RolesPermissionsAdapter對象,。這樣就只需要在<menu:useMenuDisplayer/>標(biāo)記中添加屬性permissions="rolesAdapter",而無需定義自己的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對象會(huì)根據(jù)空格從角色列表中取得各個(gè)角色,并為每個(gè)角色調(diào)用request.isUserInRole()方法,。對于調(diào)用返回true的角色,,就顯示對應(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> 說明:任何User角色的用戶都能夠看到該菜單,,也就是自動(dòng)看到User Preferences菜單項(xiàng)。只有Moderator和System角色的用戶才能看到Moderator Preferences菜單項(xiàng),。而只有System角色的用戶才能夠看到Site Preferences菜單項(xiàng),。 當(dāng)然,用戶看不到不等于沒有權(quán)限訪問,,用戶可以直接輸入連接進(jì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頁面中 <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> |
|