STRUTS-MENU简介:
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 id= "menuName" name= "userParentMenuNameList" indexId= "index" >
|
3 |
<menu:displayMenu name= '<%=menuName.toString()%> ' />
|
5 |
</menu:useMenuDisplayer>
|
原创整理不易,转载请注明出处:Struts-Menu角色权限的实例代码
代码下载地址:http://www.zuidaima.com/share/1724475036945408.htm
静态:只须在标签内加上
1 |
<menu:displayMenu name= "Home" />
|
动态:在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:
31 |
public boolean isAllowed(MenuComponent menu) {
|
32 |
if (menu.getRoles() == null ) {
|
36 |
String[] allowedRoles = delimiters.split(menu.getRoles());
|
37 |
for ( int i= 0 ; i < allowedRoles.length; i++) {
|
38 |
if (request.isUserInRole(allowedRoles[i])) {
|
在显示菜单项时,会判断菜单所定义的角色是否与用户的角色吻合,是则显示,否则不显示。
如果使用ACEGI作为权限柜架,只须加上securityContextHolderAwareRequestFilter即可。
在前一个项目当中要根据登入用户的权限进行菜单显示:我把其中相关的代码提炼出来.
在系统启动时把菜单信息加载近来.通过扩展ActionServlet进行加载.
4 |
private void loadMenuRepository()
|
6 |
MenuConstructor menuConstructor= new MenuConstructor();
|
7 |
menuConstructor.createMenuRepository();
|
数据库表中一级菜单的roles值按2.4.8.16....增加 这样与用户的roles值进行位运算.只要值为1,就可以显示该菜单.
03 |
* @param defaultRepository :缺省库
|
05 |
public void createMenuRepository()
|
07 |
ServletContext app=ApplicationContext.getContext();
|
08 |
MenuRepository defaultRepository = (MenuRepository)app.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
|
09 |
MenuRepository repository = new MenuRepository();
|
10 |
repository.setDisplayers(defaultRepository.getDisplayers());
|
11 |
List list = getMenuComponents();
|
12 |
for ( int i= 0 ; i < list.size(); i++)
|
14 |
MenuComponent mc = new MenuComponent();
|
15 |
MenuInfo menu=(MenuInfo) list.get(i);
|
16 |
String menuName = menu.getName();
|
18 |
String parentName = (String) menu.getParentName();
|
19 |
if (parentName != null )
|
21 |
MenuComponent parentMenu = repository.getMenu(parentName);
|
22 |
if (parentMenu == null )
|
24 |
parentMenu = new MenuComponent();
|
25 |
parentMenu.setName(parentName);
|
26 |
repository.addMenu(parentMenu);
|
28 |
mc.setParent(parentMenu);
|
30 |
String title = (String)menu.getTitle();
|
31 |
String location = (String) menu.getLocation();
|
32 |
String target = (String) menu.getTarget();
|
33 |
String description = (String) menu.getDescription();
|
34 |
String action=(String)menu.getAction();
|
35 |
String roles=(String)menu.getRoles();
|
37 |
mc.setLocation(location);
|
40 |
mc.setDescription(description);
|
42 |
repository.addMenu(mc);
|
44 |
constant.setMenuRepository(repository);
|
47 |
app.setAttribute( "OrderMenuList" ,getOrderMenuList());
|
54 |
private static List getMenuComponents()
|
56 |
PersistenceService service = (PersistenceService)ApplicationContextProvider.getBean( "persistenceService" );
|
57 |
String hql=QlConstructor.getSqlContent( "getMenuInfo" );
|
58 |
List menuInfoList = service.list(hql);
|
66 |
private static List getOrderMenuList()
|
68 |
List orderMenuList= new ArrayList();
|
69 |
PersistenceService service = (PersistenceService)ApplicationContextProvider.getBean( "persistenceService" );
|
70 |
String hql=QlConstructor.getSqlContent( "getParentmenuSql" );
|
71 |
orderMenuList = service.list(hql);
|
02 |
* 根据userId获取用户所能看到的菜单信息
|
03 |
* @param authSet :用户权限集
|
04 |
* @return MenuRepository : 用户所能看到的菜单库
|
06 |
public MenuRepository getUserMenuRepository( long authSet)
|
08 |
Constant constant=Constant.getInstance();
|
10 |
ServletContext app=ApplicationContext.getContext();
|
11 |
MenuRepository defaultRepository = (MenuRepository)app.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
|
12 |
MenuRepository menuRepository=constant.getMenuRepository();
|
13 |
MenuRepository userMenuRepository= new MenuRepository();
|
14 |
userMenuRepository.setDisplayers(defaultRepository.getDisplayers());
|
15 |
Set menuSet=menuRepository.getMenuNames();
|
16 |
Iterator itor=menuSet.iterator();
|
17 |
MenuComponent menuComponent = null ;
|
21 |
String menuName=(String)itor.next();
|
22 |
menuComponent = menuRepository.getMenu(menuName);
|
23 |
long roles=Long.parseLong(menuComponent.getRoles());
|
24 |
if ((roles&authSet)!= 0 )
|
26 |
userMenuRepository.addMenu(menuComponent);
|
30 |
userMenuRepository=menuRepository;
|
31 |
return userMenuRepository;
|
35 |
* 获取用户所能看到的一级菜单列表,在画面展示时struts-menu标签需要用到
|
36 |
* @param userMenuRepository :用户自己的菜单库
|
37 |
* @return List: 用户能看到的一级菜单名称数组
|
39 |
public List getParentMenuNameList(MenuRepository userMenuRepository) throws Exception
|
41 |
ServletContext app=ApplicationContext.getContext();
|
42 |
List orderMenuList=(List)app.getAttribute( "OrderMenuList" );
|
43 |
List parentMenuNameList= new ArrayList();
|
44 |
for ( int i= 0 ;i<orderMenuList.size();i++)
|
46 |
String menuName=((MenuInfo)orderMenuList.get(i)).getName();
|
47 |
if (userMenuRepository.getMenu(menuName)!= null ) parentMenuNameList.add(menuName);
|
49 |
return parentMenuNameList;
|
显示菜单:
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 id= "menuName" name= "userParentMenuNameList" indexId= "index" >
|
3 |
<menu:displayMenu name= '<%=menuName.toString()%>' />
|
5 |
</menu:useMenuDisplayer>
|
相关推荐
这个实例教程将深入介绍如何使用Struts-Menu来构建用户界面的导航系统。 1. **Struts框架基础** Struts是Java EE平台上的一款开源MVC框架,它提供了处理HTTP请求、业务逻辑整合以及视图渲染等功能。通过模型-视图-...
7. **权限控制**:Struts-menu支持与Spring Security或Apache Shiro等权限管理框架集成,可以实现菜单项的动态显示,根据用户的权限来决定哪些菜单可以被看到或点击。 8. **自定义扩展**:除了基本功能,开发者还...
struts-menu-2.4.1.jar struts-menu-2.4.1.jar
例如,你可以通过在Action中处理用户角色和权限,然后在`struts-menu`的配置中过滤掉用户无权访问的菜单项。 总结一下,`struts-menu`与Struts2.3.1的集成可以帮助开发者快速构建优雅的Web应用菜单,减少页面布局的...
### 使用Struts-menu实现网页菜单的关键知识点 #### Struts-menu简介 Struts-menu是一个基于Apache Struts框架的扩展,用于简化网页菜单的创建与管理。它不仅提供了多种样式的菜单,如下拉菜单(`DropDownMenu`)、...
2. **动态生成**:Struts-menu能够根据用户权限动态生成菜单。这意味着,对于不同角色的用户,显示的菜单可能会有所不同。这种功能对于多用户系统尤为重要,因为它可以确保用户只看到他们有权访问的菜单项。 3. **...
Struts-menu入门Demo是一个针对Java Web开发人员的实践教程,主要使用了Struts、Hibernate和MySQL这三大核心技术。这个入门示例提供了一个完整的项目结构,包括数据库文件,使得开发者能够直接运行并理解其工作原理...
这个例子是Struts-menu的一个实例,提供给需要了解或使用Struts-menu的开发者参考。下面将详细介绍Struts-menu及其在实际开发中的应用,以及如何利用提供的"struts-menu例子2"进行学习和实践。 1. **Struts-menu...
struts-menu 2.4.3.jar
1. **配置**:首先,你需要在项目的配置文件中声明Struts-menu的相关配置,如菜单的结构、链接、图标等,并关联到特定的角色和权限。 2. **权限验证**:在用户登录时,系统会获取并存储该用户的角色和权限信息。...
4. **动态菜单**:Struts-menu支持动态生成菜单,这意味着菜单内容可以根据用户角色、权限或业务状态动态变化。这在多用户、多权限的复杂应用中非常实用。 5. **视频教程**:“速动画教程第十四集.exe”和“.rtf”...
6. **配置menu-config.xml**:这是Struts-menu的核心配置文件,定义了菜单的结构、显示样式和权限控制等。例如,`DropDownMenuDisplayer`、`SimpleMenuDisplayer`等都是不同的菜单显示方式,可以根据需要选择。 7. ...
范例代码通常会展示如何在JSP页面上使用Struts-menu标签库,比如`<s:menu>`标签,它允许你在页面上直接插入生成的菜单。通过设置不同的属性,你可以定制菜单的显示效果,如是否展开子菜单,菜单项的链接,以及图标等...
struts-menu-2.4.jar,构建强大菜单
struts-menu
由于Struts-menu可能用于生成动态的用户权限相关的菜单,所以源码中可能会包含对用户角色和权限的判断逻辑。这部分内容可能涉及数据库查询、安全框架(如Spring Security)的集成等。 8. **性能优化**: 分析源码...
struts-1.3.10 源代码struts-1.3.10 源代码struts-1.3.10 源代码struts-1.3.10 源代码struts-1.3.10 源代码struts-1.3.10 源代码
"struts-menu-2.4.3-src" 是 Struts Menu 的2.4.3版本的源代码包,这对于开发者深入理解其工作原理、进行定制化开发或者修复潜在问题非常有帮助。 在"struts-menu-2.4.3"这个压缩包中,我们可以期待找到以下内容: ...
Struts-Menu.jar 是一个基于Java的开源项目,主要用于在Struts框架中生成动态菜单。Struts是一个广泛使用的MVC(Model-View-Controller)框架,它帮助开发者构建可维护性和扩展性良好的Web应用程序。StrutsMenu是...