- 浏览: 72605 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 671test -
JSP技巧篇---字符串日期格式转换
2006-05-18 22:07 7245有一些网友问我字符串转日期或日期转字符串要如何做,本 ... -
自定义集合中的排序
2006-05-19 11:33 6971、先自定义Comparator// 对象的比较器,如1 ... -
华为公司 java 面试题
2006-05-21 18:46 1050第一部分:选择题QUESTION NO: 11、 ... -
tomcat支持中文名的处理方式
2006-06-11 17:52 946在server.xml配置文件中,增加URIEncoding= ... -
進銷存系統有幾個資料庫?
2006-06-17 09:57 1036我在教授 軟體設計課程,尤其是以使用案例圖在說明架構設計時,每 ... -
Eclipse插件JSEclipse 1.5 发布
2006-06-18 12:35 942Eclipse插件JSEclipse 1.5 近日 ... -
如何在TOMCAT中调试JSP
2006-06-18 13:48 1158调试JSP时,在tomcat里改\conf\server.xm ... -
中文版API
2006-06-22 11:02 1019中文版API http://gceclub.s ... -
服务器在某些情况下需要进行的调整
2006-07-12 22:00 1522服务器在某些情况下需要进行的调整.============== ... -
采用输出内容
2006-07-16 22:45 833采用<JSP:FORWORD> 该方法是利用服务器 ... -
WebSphere中流行数据库连接池的配置(Oracle、SQL Server、Sybase、MySQL)
2006-07-24 16:15 6695本文介绍WebSphere下Oracle、SQL Serve ... -
MyEclipse+WebSphere 通过 JNDI 连接 Sybase 简介
2006-07-24 17:12 3537很久 ... -
Websphere Application Server心得
2006-07-28 10:27 1255Websphere Application Serve ... -
MyEclipse 5.0 M2 注册码及下载地址和Eclipse 3.2多国语言包
2006-07-30 12:13 2708MyEclipse 5.0 M2 注册码及下载地址 ... -
PrepareStatement中in中带问号的又一用法
2006-07-30 14:52 1118String strSQL = ... -
showModalDialog和showModelessDialog
2006-08-16 14:02 832一、showModalDialog和showModelessD ... -
Regular Expression in Java
2006-08-23 21:42 21691. Introduction 正規表示式(Regular E ... -
Reqular Expressions
2006-08-23 21:45 910雖然Reqular Expressions(以 ... -
图解eclipse+myelcipse开发EJB
2006-08-29 14:08 924http://www2.blogjava.net/rickhu ...
相关推荐
struts-menu-2.4.1.jar struts-menu-2.4.1.jar
Struts-Menu实例教程 Struts-Menu实例教程 Struts-Menu实例教程
这里有struts-menu的所用到的包,包含有images, scripts,styles,templates!希望能够帮到大家,谢谢!
struts-menu 2.4.3.jar
一个很好的struts-menu的人门例子,包括数据库文件,可以直接运行。
struts-menu-2.4.jar,构建强大菜单
使用Struts-menu轻松实现网页菜单
struts-menu
struts-menu例子2 有需要的朋友可以下载来看看 蛮好用的哦 struts-menu例子2
struts-config.xml struts标准配置文件 struts-config
struts-taglib-1.3.8.jar struts-taglib-1.3.8.jar
struts-menu-src的源代码和相应的规范
一个struts-menu-2.0的标签,里面有相应的lib,范例等
StrutsMenu(菜单)jar包。资源内部包括: struts-menu-2.4.3.jar commons-collections-3[1].2.1.jar
Struts-menu是一个基于Struts框架的菜单生成应用框架,它是开源软件,可以从http://www.sourceforge.net上获得。Struts-menu在没有权限控制时最简单,只需配置文件就可以生成需要的菜单;在要菜单权限控制时,可以和...
NULL 博文链接:https://javastudyeye.iteye.com/blog/1415549
Struts-menu例子加视频共大家学习
struts-menu-2.4.3.jar
使用struts2+hibernate+spring整合实现权限管理,使用struts-menu实现菜单,使用valueList实现信息分页
赠送jar包:struts-core-1.3.8.jar; 赠送原API文档:struts-core-1.3.8-javadoc.jar; 赠送源代码:struts-core-1.3.8-sources.jar; 赠送Maven依赖信息文件:struts-core-1.3.8.pom; 包含翻译后的API文档:struts...