Struts-Menu角色权限的实例代码
2014-04-02 10:35
274 查看
STRUTS-MENU简介:
STRUTS-MENU支持静态和动态菜单,数据来源和显示方式分开,菜单文字国际化,权限。
原创整理不易,转载请注明出处:Struts-Menu角色权限的实例代码
代码下载地址:http://www.zuidaima.com/share/1724475036945408.htm
静态:只须在标签内加上
动态:在menu:useMenuDisplayer中加上:repository="userMenuRepository"
显示样式:在menu:useMenuDisplayer中加上:name="Velocity"
国际化:在menu:useMenuDisplayer中加上:bundle="org.apache.struts.action.MESSAGE"
权限:在menu:useMenuDisplayer中加上:permissions="rolesAdapter",如果名字是"rolesAdapter"则会自动调用
默认的net.sf.navigator.menu.RolesPermissionsAdapter:
在显示菜单项时,会判断菜单所定义的角色是否与用户的角色吻合,是则显示,否则不显示。
如果使用ACEGI作为权限柜架,只须加上securityContextHolderAwareRequestFilter即可。
在前一个项目当中要根据登入用户的权限进行菜单显示:我把其中相关的代码提炼出来.
在系统启动时把菜单信息加载近来.通过扩展ActionServlet进行加载.
数据库表中一级菜单的roles值按2.4.8.16....增加这样与用户的roles值进行位运算.只要值为1,就可以显示该菜单.
显示菜单:
STRUTS-MENU支持静态和动态菜单,数据来源和显示方式分开,菜单文字国际化,权限。
1 | <menu:useMenuDisplayer name= "Velocity" config= "/framework/res/menucomp/templates/xtree.html" bundle= "org.apache.struts.action.MESSAGE" repository= "userMenuRepository" permissions= "rolesAdapter" > |
2 | <logic:iterate "menuName" name= "userParentMenuNameList" indexId= "index" > |
3 | <menu:displayMenu '<%=menuName.toString()%> /> |
4 | </logic:iterate> |
5 | </menu:useMenuDisplayer> |
代码下载地址:
静态:只须在标签内加上
1 | <menu:displayMenu "Home" /> |
显示样式:在menu:useMenuDisplayer中加上:name="Velocity"
国际化:在menu:useMenuDisplayer中加上:bundle="org.apache.struts.action.MESSAGE"
权限:在menu:useMenuDisplayer中加上:permissions="rolesAdapter",如果名字是"rolesAdapter"则会自动调用
默认的net.sf.navigator.menu.RolesPermissionsAdapter:
01 | /* |
02 | * |
03 | * |
04 | * |
05 | */ |
06 |
07 | package |
08 |
09 | import |
10 | import |
11 |
12 | /** |
13 | * |
14 | * |
15 | * |
16 | * |
17 | */ |
18 | public |
19 | private |
20 | private |
21 |
22 | public |
23 | this.request |
24 | } |
25 |
26 | /** |
27 | * |
28 | * |
29 | * |
30 | */ |
31 | public boolean isAllowed(MenuComponent |
32 | if (menu.getRoles() null ) |
33 | return true ; // |
34 | } else { |
35 | // |
36 | String[] |
37 | for ( int i= 0 ; |
38 | if (request.isUserInRole(allowedRoles[i])) |
39 | return true ; |
40 | } |
41 | } |
42 | } |
43 | return false ; |
44 | } |
45 | } |
如果使用ACEGI作为权限柜架,只须加上securityContextHolderAwareRequestFilter即可。
在前一个项目当中要根据登入用户的权限进行菜单显示:我把其中相关的代码提炼出来.
在系统启动时把菜单信息加载近来.通过扩展ActionServlet进行加载.
1 | /** |
2 | *加载菜单静态信息 |
3 | */ |
4 | private void loadMenuRepository() |
5 | { |
6 | MenuConstructor new MenuConstructor(); |
7 | menuConstructor.createMenuRepository(); |
8 | } |
01 | /** |
02 | * |
03 | * |
04 | */ |
05 | public void createMenuRepository() |
06 | { |
07 | ServletContext |
08 | MenuRepository |
09 | MenuRepository new MenuRepository(); |
10 | repository.setDisplayers(defaultRepository.getDisplayers()); |
11 | List |
12 | for ( int i= 0 ; |
13 | { |
14 | MenuComponent new MenuComponent(); |
15 | MenuInfo |
16 | String |
17 | mc.setName(menuName); |
18 | String |
19 | if (parentName null ) |
20 | { |
21 | MenuComponent |
22 | if (parentMenu null ) |
23 | { |
24 | parentMenu new MenuComponent(); |
25 | parentMenu.setName(parentName); |
26 | repository.addMenu(parentMenu); |
27 | } |
28 | mc.setParent(parentMenu); |
29 | } |
30 | String |
31 | String |
32 | String |
33 | String |
34 | String |
35 | String |
36 | mc.setTitle(title); |
37 | mc.setLocation(location); |
38 | mc.setAction(action); |
39 | mc.setTarget(target); |
40 | mc.setDescription(description); |
41 | mc.setRoles(roles); |
42 | repository.addMenu(mc); |
43 | } |
44 | constant.setMenuRepository(repository); |
45 | //因为加载出来的菜单信息被打乱了. |
46 | //按照库表菜单顺序保存一级菜单信息,在struts-menu显示时要用 |
47 | app.setAttribute( "OrderMenuList" ,getOrderMenuList()); |
48 | } |
49 |
50 | /** |
51 | * |
52 | * |
53 | */ |
54 | private static List |
55 | { |
56 | PersistenceService "persistenceService" ); |
57 | String "getMenuInfo" ); |
58 | List |
59 | return menuInfoList; |
60 | } |
61 |
62 | /** |
63 | * |
64 | * |
65 | */ |
66 | private static List |
67 | { |
68 | List new ArrayList(); |
69 | PersistenceService "persistenceService" ); |
70 | String "getParentmenuSql" ); |
71 | orderMenuList |
72 | return orderMenuList; |
73 | } |
01 | /** |
02 | * |
03 | * |
04 | * |
05 | */ |
06 | public MenuRepository long authSet) |
07 | { |
08 | Constant |
09 | //获取系统所有菜单 |
10 | ServletContext |
11 | MenuRepository |
12 | MenuRepository |
13 | MenuRepository new MenuRepository(); |
14 | userMenuRepository.setDisplayers(defaultRepository.getDisplayers()); |
15 | Set |
16 | Iterator |
17 | MenuComponent null ; |
18 | //查找满足用户权限的菜单项 |
19 | while (itor.hasNext()) |
20 | { |
21 | String |
22 | menuComponent |
23 | long roles=Long.parseLong(menuComponent.getRoles()); |
24 | if ((roles&authSet)!= 0 ) |
25 | { |
26 | userMenuRepository.addMenu(menuComponent); |
27 | } |
28 | } |
29 | //TODO:下面生成用户所能看到的菜单 |
30 | userMenuRepository=menuRepository; |
31 | return userMenuRepository; |
32 | } |
33 |
34 | /** |
35 | * |
36 | * |
37 | * |
38 | */ |
39 | public List throws Exception |
40 | { |
41 | ServletContext |
42 | List "OrderMenuList" ); |
43 | List new ArrayList(); |
44 | for ( int i= 0 ;i<orderMenuList.size();i++) |
45 | { |
46 | String |
47 | if (userMenuRepository.getMenu(menuName)!= null ) |
48 | } |
49 | return parentMenuNameList; |
50 | } |
1 | <menu:useMenuDisplayer name= "Velocity" config= "/framework/res/menucomp/templates/xtree.html" bundle= "org.apache.struts.action.MESSAGE" repository= "userMenuRepository" permissions= "menuPermession" > |
2 | <logic:iterate "menuName" name= "userParentMenuNameList" indexId= "index" > |
3 | <menu:displayMenu '<%=menuName.toString()%>' /> |
4 | </logic:iterate> |
5 | </menu:useMenuDisplayer> |
相关文章推荐
- Java SSL 服务器 客户端通信 试用
- spring+jotm 多数据源事务管理(二)hibernate
- MyEclipse优化
- Java并发结构
- 【转】Java虚拟机学习分享
- 黑马程序员-关于Spring的设计理念
- Spring配置Scope属性注意点
- java线程同步,必须知道的
- MyEclipse 代码编写,编译卡死,启动卡死解决方案
- Java IO流知识总结
- Java开发工具大全(2014版)
- String深入学习笔记
- eclipse中设置java、xml文件的字体大小以及代码自动提示功能
- 自定义Struts2表单验证后的错误信息显示格式
- java变量,初始化快,构造函数的执行顺序
- java容器之Set接口
- Java enum的用法详解
- Java VM 参数描述
- eclipse的虚拟内存、物理内存的设置疑惑
- SSH旅程(六)Spring和struts结合(方案一)