- 浏览: 74358 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
godownget:
三大主流数据库神速上手(MySQL、MSSQL、Oracle) ...
WebSphere中流行数据库连接池的配置(Oracle、SQL Server、Sybase、MySQL) -
guoweihelloworld:
[b]: [引用b]文字 (alt+b)[/b][/b]htt ...
Struts-Menu结合角色权限的应用 -
fjkzn1102:
能否给个例子看看,正在学习这方面的集成开发
SSH JBPM ACEGI JBPM WEB CONSOLE -
liyingxu30:
非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感谢非常感 ...
WebSphere中流行数据库连接池的配置(Oracle、SQL Server、Sybase、MySQL) -
zhuqx1130:
securityContextHolderAwareReque ...
Struts-Menu结合角色权限的应用
STRUTS-MENU简介:
STRUTS-MENU支持静态和动态菜单,数据来源和显示方式分开,菜单文字国际化,权限。
<menu:useMenuDisplayer name="Velocity" config="/framework/res/menucomp/templates/xtree.html" bundle="org.apache.struts.action.MESSAGE" repository="userMenuRepository" permissions="rolesAdapter">
<logic:iterate id="menuName" name="userParentMenuNameList" indexId="index">
<menu:displayMenu name='<%=menuName.toString()%>' />
</logic:iterate>
</menu:useMenuDisplayer>
<logic:iterate id="menuName" name="userParentMenuNameList" indexId="index">
<menu:displayMenu name='<%=menuName.toString()%>' />
</logic:iterate>
</menu:useMenuDisplayer>
静态:只须在标签内加上
<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:
/**//*
* RolesPermissionsAdapter.java
*
* Created on December 7, 2002 2:25 PM
*/
package net.sf.navigator.menu;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Pattern;
/** *//**
* This class used container-managed security to check access
* to menus. The roles are set in menu-config.xml.
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
public class RolesPermissionsAdapter implements PermissionsAdapter {
private Pattern delimiters = Pattern.compile("(?<!\\\\),");
private HttpServletRequest request;
public RolesPermissionsAdapter(HttpServletRequest request) {
this.request = request;
}
/** *//**
* If the menu is allowed, this should return true.
*
* @return whether or not the menu is allowed.
*/
public boolean isAllowed(MenuComponent menu) {
if (menu.getRoles() == null) {
return true; // no roles define, allow everyone
} else {
// Get the list of roles this menu allows
String[] allowedRoles = delimiters.split(menu.getRoles());
for (int i=0; i < allowedRoles.length; i++) {
if (request.isUserInRole(allowedRoles[i])) {
return true;
}
}
}
return false;
}
}
* RolesPermissionsAdapter.java
*
* Created on December 7, 2002 2:25 PM
*/
package net.sf.navigator.menu;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Pattern;
/** *//**
* This class used container-managed security to check access
* to menus. The roles are set in menu-config.xml.
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
public class RolesPermissionsAdapter implements PermissionsAdapter {
private Pattern delimiters = Pattern.compile("(?<!\\\\),");
private HttpServletRequest request;
public RolesPermissionsAdapter(HttpServletRequest request) {
this.request = request;
}
/** *//**
* If the menu is allowed, this should return true.
*
* @return whether or not the menu is allowed.
*/
public boolean isAllowed(MenuComponent menu) {
if (menu.getRoles() == null) {
return true; // no roles define, allow everyone
} else {
// Get the list of roles this menu allows
String[] allowedRoles = delimiters.split(menu.getRoles());
for (int i=0; i < allowedRoles.length; i++) {
if (request.isUserInRole(allowedRoles[i])) {
return true;
}
}
}
return false;
}
}
在显示菜单项时,会判断菜单所定义的角色是否与用户的角色吻合,是则显示,否则不显示。
如果使用ACEGI作为权限柜架,只须加上securityContextHolderAwareRequestFilter即可。
在前一个项目当中要根据登入用户的权限进行菜单显示:我把其中相关的代码提炼出来.
在系统启动时把菜单信息加载近来.通过扩展ActionServlet进行加载.
/** *//**
*加载菜单静态信息
*/
private void loadMenuRepository()
{
MenuConstructor menuConstructor=new MenuConstructor();
menuConstructor.createMenuRepository();
}
*加载菜单静态信息
*/
private void loadMenuRepository()
{
MenuConstructor menuConstructor=new MenuConstructor();
menuConstructor.createMenuRepository();
}
数据库表中一级菜单的roles值按2.4.8.16....增加 这样与用户的roles值进行位运算.只要值为1,就可以显示该菜单.
/** *//**
* 加载系统菜单入菜单库
* @param defaultRepository :缺省库
*/
public void createMenuRepository()
{
ServletContext app=ApplicationContext.getContext();
MenuRepository defaultRepository = (MenuRepository)app.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
MenuRepository repository = new MenuRepository();
repository.setDisplayers(defaultRepository.getDisplayers());
List list = getMenuComponents();
for (int i=0; i < list.size(); i++)
{
MenuComponent mc = new MenuComponent();
MenuInfo menu=(MenuInfo) list.get(i);
String menuName = menu.getName();
mc.setName(menuName);
String parentName = (String) menu.getParentName();
if (parentName != null)
{
MenuComponent parentMenu = repository.getMenu(parentName);
if (parentMenu == null)
{
parentMenu = new MenuComponent();
parentMenu.setName(parentName);
repository.addMenu(parentMenu);
}
mc.setParent(parentMenu);
}
String title = (String)menu.getTitle();
String location = (String) menu.getLocation();
String target = (String) menu.getTarget();
String description = (String) menu.getDescription();
String action=(String)menu.getAction();
String roles=(String)menu.getRoles();
mc.setTitle(title);
mc.setLocation(location);
mc.setAction(action);
mc.setTarget(target);
mc.setDescription(description);
mc.setRoles(roles);
repository.addMenu(mc);
}
constant.setMenuRepository(repository);
//因为加载出来的菜单信息被打乱了.
//按照库表菜单顺序保存一级菜单信息,在struts-menu显示时要用
app.setAttribute("OrderMenuList",getOrderMenuList());
}
/** *//**
* 从数据库中读取菜单信息
* @return List :菜单信息
*/
private static List getMenuComponents()
{
PersistenceService service = (PersistenceService)ApplicationContextProvider.getBean("persistenceService");
String hql=QlConstructor.getSqlContent("getMenuInfo");
List menuInfoList = service.list(hql);
return menuInfoList;
}
/** *//**
* 将菜单表中的一级菜单按照显示顺序取出来
* @return List:一级菜单信息
*/
private static List getOrderMenuList()
{
List orderMenuList=new ArrayList();
PersistenceService service = (PersistenceService)ApplicationContextProvider.getBean("persistenceService");
String hql=QlConstructor.getSqlContent("getParentmenuSql");
orderMenuList = service.list(hql);
return orderMenuList;
}
* 加载系统菜单入菜单库
* @param defaultRepository :缺省库
*/
public void createMenuRepository()
{
ServletContext app=ApplicationContext.getContext();
MenuRepository defaultRepository = (MenuRepository)app.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
MenuRepository repository = new MenuRepository();
repository.setDisplayers(defaultRepository.getDisplayers());
List list = getMenuComponents();
for (int i=0; i < list.size(); i++)
{
MenuComponent mc = new MenuComponent();
MenuInfo menu=(MenuInfo) list.get(i);
String menuName = menu.getName();
mc.setName(menuName);
String parentName = (String) menu.getParentName();
if (parentName != null)
{
MenuComponent parentMenu = repository.getMenu(parentName);
if (parentMenu == null)
{
parentMenu = new MenuComponent();
parentMenu.setName(parentName);
repository.addMenu(parentMenu);
}
mc.setParent(parentMenu);
}
String title = (String)menu.getTitle();
String location = (String) menu.getLocation();
String target = (String) menu.getTarget();
String description = (String) menu.getDescription();
String action=(String)menu.getAction();
String roles=(String)menu.getRoles();
mc.setTitle(title);
mc.setLocation(location);
mc.setAction(action);
mc.setTarget(target);
mc.setDescription(description);
mc.setRoles(roles);
repository.addMenu(mc);
}
constant.setMenuRepository(repository);
//因为加载出来的菜单信息被打乱了.
//按照库表菜单顺序保存一级菜单信息,在struts-menu显示时要用
app.setAttribute("OrderMenuList",getOrderMenuList());
}
/** *//**
* 从数据库中读取菜单信息
* @return List :菜单信息
*/
private static List getMenuComponents()
{
PersistenceService service = (PersistenceService)ApplicationContextProvider.getBean("persistenceService");
String hql=QlConstructor.getSqlContent("getMenuInfo");
List menuInfoList = service.list(hql);
return menuInfoList;
}
/** *//**
* 将菜单表中的一级菜单按照显示顺序取出来
* @return List:一级菜单信息
*/
private static List getOrderMenuList()
{
List orderMenuList=new ArrayList();
PersistenceService service = (PersistenceService)ApplicationContextProvider.getBean("persistenceService");
String hql=QlConstructor.getSqlContent("getParentmenuSql");
orderMenuList = service.list(hql);
return orderMenuList;
}
/** *//**
* 根据userId获取用户所能看到的菜单信息
* @param authSet :用户权限集
* @return MenuRepository : 用户所能看到的菜单库
*/
public MenuRepository getUserMenuRepository(long authSet)
{
Constant constant=Constant.getInstance();
//获取系统所有菜单
ServletContext app=ApplicationContext.getContext();
MenuRepository defaultRepository = (MenuRepository)app.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
MenuRepository menuRepository=constant.getMenuRepository();
MenuRepository userMenuRepository=new MenuRepository();
userMenuRepository.setDisplayers(defaultRepository.getDisplayers());
Set menuSet=menuRepository.getMenuNames();
Iterator itor=menuSet.iterator();
MenuComponent menuComponent =null;
//查找满足用户权限的菜单项
while(itor.hasNext())
* 根据userId获取用户所能看到的菜单信息
* @param authSet :用户权限集
* @return MenuRepository : 用户所能看到的菜单库
*/
public MenuRepository getUserMenuRepository(long authSet)
{
Constant constant=Constant.getInstance();
//获取系统所有菜单
ServletContext app=ApplicationContext.getContext();
MenuRepository defaultRepository = (MenuRepository)app.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
MenuRepository menuRepository=constant.getMenuRepository();
MenuRepository userMenuRepository=new MenuRepository();
userMenuRepository.setDisplayers(defaultRepository.getDisplayers());
Set menuSet=menuRepository.getMenuNames();
Iterator itor=menuSet.iterator();
MenuComponent menuComponent =null;
//查找满足用户权限的菜单项
while(itor.hasNext())
评论
2 楼
guoweihelloworld
2013-11-25
[b]: [[*][*][*][*][*][*][/list] [*][*][*][*][*][/list] [*][*][*][*][/list] [*][*][*][/list] [*][*][/list] [*][/list] [/list] [/list]mages/smiles/icon_sad.gif
引用
b]文字 (alt+b)[/b][/b]
http:[size=x-small][/size]//www.iteye.com/i- [list]
- [*][list]
- [*][*][list]
- [*][*][*][list]
- [*][*][*][*][list]
- [*][*][*][*][*][list]
- [*][*][*][*][*][*][list]
- [*][*][*][*][*][*][*][list]
- [*][*][*][*][*][*][*][*]
[*][*][*][*][*][*][*][*][*]
[*][*][*][*][*][*][*][*][*]
|
||[*][*][*][*][*][*][*][*][*]
|||[*][*][*][*][*][*][*][*][*]
||||[*][*][*][*][*][*][*][*][*]
|||||[*][*][*][*][*][*][*][*][*]
||||||[*][*][*][*][*][*][*][*][*]
|||||||[*][*][*][*][*][*][*][*][*]
||||||||[*][*][*][*][*][*][*][*][*]
|||||||||[*][*][*][*][*][*][*][*][*]
||||||||||[*][*][*][*][*][*][*][*][*]
|||||||||||[*][*][*][*][*][*][*][*][*]
||||||||||||[*][*][*][*][*][*][*][*][*]
|||||||||||||[*][*][*][*][*][*][*][*][*] [/flash][/flash][/flash] [*][*][*][*][*][*][*][*][*] - [*][*][*][*][*][*][*][*]||||||||||||
- [*][*][*][*][*][*][*][*]|||||||||||
- [*][*][*][*][*][*][*][*]||||||||||
- [*][*][*][*][*][*][*][*]|||||||||
- [*][*][*][*][*][*][*][*]||||||||
- [*][*][*][*][*][*][*][*]|||||||
- [*][*][*][*][*][*][*][*]||||||
- [*][*][*][*][*][*][*][*]|||||
- [*][*][*][*][*][*][*][*]||||
- [*][*][*][*][*][*][*][*]|||
- [*][*][*][*][*][*][*][*]||
- [*][*][*][*][*][*][*][*]|
- [*][*][*][*][*][*][*][*]
- [*][*][*][*][*][*][*]
1 楼
zhuqx1130
2007-12-27
securityContextHolderAwareRequestFilter 加到什么位置上啊
发表评论
-
Test
2006-05-06 12:29 703test -
JSP技巧篇---字符串日期格式转换
2006-05-18 22:07 7290有一些网友问我字符串转日期或日期转字符串要如何做,本 ... -
自定义集合中的排序
2006-05-19 11:33 7311、先自定义Comparator// 对象的比较器,如1 ... -
华为公司 java 面试题
2006-05-21 18:46 1097第一部分:选择题QUESTION NO: 11、 ... -
tomcat支持中文名的处理方式
2006-06-11 17:52 991在server.xml配置文件中,增加URIEncoding= ... -
進銷存系統有幾個資料庫?
2006-06-17 09:57 1066我在教授 軟體設計課程,尤其是以使用案例圖在說明架構設計時,每 ... -
Eclipse插件JSEclipse 1.5 发布
2006-06-18 12:35 977Eclipse插件JSEclipse 1.5 近日 ... -
如何在TOMCAT中调试JSP
2006-06-18 13:48 1222调试JSP时,在tomcat里改\conf\server.xm ... -
中文版API
2006-06-22 11:02 1056中文版API http://gceclub.s ... -
服务器在某些情况下需要进行的调整
2006-07-12 22:00 1558服务器在某些情况下需要进行的调整.============== ... -
采用输出内容
2006-07-16 22:45 867采用<JSP:FORWORD> 该方法是利用服务器 ... -
WebSphere中流行数据库连接池的配置(Oracle、SQL Server、Sybase、MySQL)
2006-07-24 16:15 6760本文介绍WebSphere下Oracle、SQL Serve ... -
MyEclipse+WebSphere 通过 JNDI 连接 Sybase 简介
2006-07-24 17:12 3581很久 ... -
Websphere Application Server心得
2006-07-28 10:27 1294Websphere Application Serve ... -
MyEclipse 5.0 M2 注册码及下载地址和Eclipse 3.2多国语言包
2006-07-30 12:13 2748MyEclipse 5.0 M2 注册码及下载地址 ... -
PrepareStatement中in中带问号的又一用法
2006-07-30 14:52 1191String strSQL = ... -
showModalDialog和showModelessDialog
2006-08-16 14:02 873一、showModalDialog和showModelessD ... -
Regular Expression in Java
2006-08-23 21:42 22151. Introduction 正規表示式(Regular E ... -
Reqular Expressions
2006-08-23 21:45 943雖然Reqular Expressions(以 ... -
图解eclipse+myelcipse开发EJB
2006-08-29 14:08 955http://www2.blogjava.net/rickhu ...
相关推荐
例如,你可以通过在Action中处理用户角色和权限,然后在`struts-menu`的配置中过滤掉用户无权访问的菜单项。 总结一下,`struts-menu`与Struts2.3.1的集成可以帮助开发者快速构建优雅的Web应用菜单,减少页面布局的...
6. **集成与扩展**:Struts-menu可以轻松集成到现有的Struts应用中,同时也允许开发者进行扩展,例如添加新的菜单样式、行为或者与第三方权限框架的整合。 7. **实践应用**:通过提供的例子,学习者可以了解如何在...
Struts-menu正是为了解决这一问题而诞生的,它将权限按钮的展示与用户的权限紧密结合起来。 Struts是Apache软件基金会下的一个开源MVC框架,用于构建基于Java的、可维护性高的Web应用程序。在Struts框架中,开发者...
在项目中,struts-menu会基于用户的角色和权限信息,生成仅包含用户有权访问的菜单,这样可以确保用户界面的简洁性和安全性。 最后,valuelist是实现信息分页的一种机制,它帮助在大量数据列表中分页展示结果,提升...
4. **Action类**:在Struts框架中创建一个Action,负责调用DAO获取当前用户有权访问的菜单,可能需要结合用户登录信息和角色权限。 5. **Session Action**:可能需要使用Session Action将菜单数据保存在用户的会话...
在实际开发中,这三部分的结合意味着开发者正在构建一个具有高效数据管理能力的J2EE应用,用户界面通过框架页面保持一致性和易用性,同时通过Struts Menu提供基于角色的动态菜单导航。这样的系统既满足了业务需求,...
在Struts2框架中,StrutsMenu还支持与Struts2的拦截器结合,实现动态加载用户权限相关的菜单。你可以在用户的登录信息中存储权限标识,然后在拦截器中根据这些权限过滤掉无权访问的菜单项。 总的来说,StrutsMenu是...
Struts_Menu则是针对Struts框架的一个扩展,主要用于生成动态的、可配置的菜单结构,这在大型企业级应用中十分常见,因为它可以灵活地根据用户角色和权限展示不同的菜单项。 Struts_Menu的核心组件包括以下几个部分...
而在Struts层面,可能会有一个专门的Action来处理菜单的请求,根据用户角色和权限动态生成菜单结构。这可能涉及到Session级的缓存或者拦截器来实现权限检查。 项目中的`webModel`目录可能包含了Struts的模型组件,...
### Struts实现的权限设计详解 #### 一、资源(Resource) 在系统权限设计中,**...通过上述介绍,我们可以看到,通过配置文件的方式定义角色和资源,并结合框架本身的扩展,可以灵活地实现各种复杂的权限控制需求。
SSH(Struts2 + Spring + Hibernate)是Java开发中常用的一个集成框架,它结合了Struts的MVC设计模式、Spring的依赖注入以及Hibernate的对象关系映射,为开发者提供了一个强大的企业级应用开发基础。在"SSH的用户...
5. **细粒度权限实现**:在Hibernate层面,可以为每个数据实体定义权限字段,比如在User表中添加角色和权限关联,同时在Menu或Resource表中添加对应的操作权限。在用户登录后,根据其角色加载相应的权限,以便在...
3. **Struts框架**: Struts是基于MVC设计模式的Web应用框架,主要用于控制应用程序的流程。它通过Action类来处理用户的请求,并决定接下来的视图。在JSF+SSH集成中,Struts通常用作连接JSF和Spring的桥梁,处理HTTP...
《基于Struts2、Hibernate3和Spring3的Java权限管理系统详解》 在现代软件开发中,权限管理是不可或缺的一部分,它确保了系统安全性和数据隐私。本文将详细讲解一个使用Struts2、Hibernate3和Spring3框架构建的Java...
在SSH(Spring、Struts和Hibernate)框架下,利用AJAX动态从数据库查询并加载菜单是一种常见的需求,尤其是在开发Web应用程序时,为了提供用户友好的交互体验。下面将详细讲解如何实现这一功能。 首先,我们需要...