`
唯快不破
  • 浏览: 82833 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

基于webwork拦截器的权限设计

阅读更多
前段时间逛javaeye获得灵感,部分重新设计了公司项目的权限功能(如有雷同纯属巧合),现在在博客里总结一下。
原理是利用webwork拦截器拦截action,但细节处千差万别,下面看看我的。

先假设一个场景:
1、表单A有CRUD4个操作,分别对应4个权限。
2、每个操作分别对应若干action,如Create操作里包括Aaction、Baction。
3、当用户拥有C权限时,他应该能执行Aaction、Baction。

下面是我的实现:
1、将用户权限放在用户表的权限字段中,如放入字符串“C-R-U-D”。

2、新建一个Purview类,是一个普通java类用于设置权限。如:
public class Purview{
	private Boolean create;
	private Boolean retrieve;
	private Boolean update;
         ……	
	public Boolean getCreate() {
		return create;
	}	
	public void setCreate(Boolean create) {
		this.create = create;
	}
	……		
}


3、用户登录时,根据权限字段中的记录,将Purview类中的属性设为true,然后将设置好的Purview类放入session中。如:
String yhql = yonghu.getLanaction();//lanaction是权限字段
String[] lanac;
	if(StringHelper.isNotEmpty(yhql)){
		Purview purview = new Purview();
		lanac = yhql.split("-");
		for(int i=0,len=lanac.length; i<len; i++){
			if(lanac[i].equals("C")){
				purview.setCreate(true);
			}
			else if(lanac[i].equals("R")){
				purview.setRetrieve(true);
			}
			……		
            }
             Map map = ActionContext.getContext().getSession();
	    map.put("quanli", purview);
	}


4、当用户执行某个action时,拦截器从session中获取当前用户权限,判断其是否具有访问权限。如:
if(purview!=null){//purview为从session中获取的Purview类	
       if(action instanceof RenAction){//action为Aaction对应的Action类
	 if(actionName.equals("Aaction")//actionName为xml里的action名 
                  || actionName.equals("Baction") ){
			if(!purview.getCreate()){
			throw new Exception("对不起,您没有此权限");
			}
		}
	 else if(actionName.equals("Caction")){
		    if(!purview.getRetrieve()){
		         throw new Exception("对不起,您没有此权限");
			}
		}
                ……
                   ……

大概先写这么多吧。
分享到:
评论
7 楼 zhenjia 2009-03-16  
这只是 C R U D
但是,如有个导出 或者导入 之类的操作
或者 上传 等呢?这还不止 。。。。
这样的话你这个就有点行不通了,
权限权限不只是控制CRUD
6 楼 vtrtbb 2009-03-16  
xly_971223 写道
唯快不破 写道
hdragonh 写道

basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框? 看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。

用jsp tag实现



怎么用,最多也就是解决了粗粒度权限。比如说,不同模块有不同权限,如何处理?
最简单的也是最常见的,记录级别的权限,以及字段级别的就无能为例了

比如:一个单据,需要总经理看全部,部门经理看部门,员工看自己。。。你总不能在满页面的写<c:if 吧????
5 楼 xly_971223 2008-12-09  
唯快不破 写道
hdragonh 写道

basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框? 看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。

用jsp tag实现
4 楼 唯快不破 2008-12-09  
hdragonh 写道

basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框? 看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。
3 楼 唯快不破 2008-12-09  
basibasi 写道

楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框?

弹出“无权限”的提示。
2 楼 hdragonh 2008-12-09  
basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框?


看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。
1 楼 basibasi 2008-12-09  
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框?

相关推荐

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    4. **Interceptor(拦截器)**:类似于AOP(面向切面编程),提供预处理和后处理功能,例如日志、权限验证、事务控制等。 5. **Result**:负责将Action执行的结果转发到相应的视图,可以是JSP、Freemarker、...

    基于webWork的MVC入门例子

    WebWork的拦截器允许你在Action执行前后插入额外的逻辑,如日志记录、权限验证等。在`struts.xml`中,你可以定义一个拦截器栈,并将它应用于特定的Action或所有Action。 **七、总结** 通过"struts2Demo"这个简单的...

    struts2权威指南-基于webwork核心的MVC开发

    **Interceptor(拦截器)**:拦截器是Struts2的一个强大特性,它们按照预定义的顺序在Action调用前后执行,提供了如日志、权限验证、事务管理等功能。开发者可以通过自定义拦截器来扩展框架的功能。 **结果(Result...

    Struts 2.1权威指南基于WebWork核心的MVC开发源代码

    总的来说,"Struts 2.1权威指南基于WebWork核心的MVC开发"涵盖了从基础概念到高级特性的全面内容,包括但不限于Action、拦截器、OGNL、配置文件、结果类型等,是学习和掌握Struts 2.1框架的宝贵资料。通过深入学习并...

    Struts.2权威指南--基于WebWork核心的MVC开发.0007.pdf

    拦截器是Struts.2框架的一大特色,它允许开发者在Action执行前后添加额外的处理逻辑,如权限检查、日志记录、数据绑定等。通过自定义拦截器,可以实现高度灵活的业务逻辑控制。同时,Struts.2提供了多种结果类型,如...

    Struts2权威指南--基于WebWork核心的MVC开发

    《Struts2权威指南--基于WebWork核心的MVC开发》是针对Java Web开发者的一本经典教程,尤其适合那些希望深入了解Struts2框架及其在MVC模式下的应用的人群。这本书的前三个章节主要涵盖了Struts2的基础知识,WebWork...

    Struts 2权威指南--基于WebWork核心的MVC开发

    总的来说,"Struts 2权威指南--基于WebWork核心的MVC开发"这本书将引导读者全面了解和掌握Struts 2框架的各个方面,包括其核心组件、配置方式、拦截器机制以及与视图的交互等,是Java Web开发者必备的参考书籍。...

    Struts.2权威指南--基于WebWork核心的MVC开发.0001.pdf

    《Struts.2权威指南——基于WebWork核心的MVC开发》是一本深入解析Struts.2框架的经典著作,旨在帮助开发者全面理解并熟练掌握基于WebWork核心的模型视图控制器(Model-View-Controller,简称MVC)架构在Web应用开发...

    WebWork2.0讲解说明

    3. Interceptors(拦截器):拦截器是WebWork2.0的一个强大功能,允许在Action调用前后插入自定义逻辑,如权限验证、日志记录等。 二、WebWork2.0主要特性 1. 智能表单绑定:WebWork2.0支持自动将HTTP请求参数绑定...

    Struts.2权威指南--基于WebWork核心的MVC开发.0003.pdf

    1. **拦截器(Interceptor)**:Struts.2提供了一套强大的拦截器机制,可以对Action执行前后的各种操作进行定制化处理,如权限控制、事务管理、输入验证等。 2. **类型转换和校验**:Struts.2支持自动的参数类型转换...

    webwork源码底层实现

    4. **Interceptors(拦截器)**:WebWork引入了拦截器的概念,它们在Action执行前后执行,可以实现通用的功能,如权限检查、日志记录等。在源码中,你会看到这些拦截器的实现。 5. **Value Stack(值栈)**:...

    webwork

    3. **拦截器(Interceptors)**:WebWork 使用拦截器来执行一些预处理或后处理任务,如权限验证、日志记录等。拦截器可以在Action执行前后插入自定义逻辑,增强了系统功能的灵活性。 4. **异常处理**:WebWork 提供...

    Struts 2权威指南--基于WebWork核心的MVC开发(源代码)

    Struts 2是Java平台上的一个开源MVC框架,它基于WebWork的核心技术,提供了强大的动作调度、拦截器和结果映射等功能,极大地简化了Web应用程序的开发。本指南将深入探讨Struts 2框架的核心概念和技术,以及如何利用...

    WebWork docs 2 -- webWork 详细的说明文档

    4. **拦截器(Interceptors)**:拦截器允许在Action执行前后插入额外的功能,如日志记录、事务管理、权限检查等。学习如何编写和配置拦截器能提高代码的复用性和可维护性。 5. **结果(Results)**:Results定义了...

    Struts.2权威指南--基于WebWork核心的MVC开发.rar

    4. **拦截器**:拦截器是Struts 2的一个重要特性,它们在Action调用前后执行,可以实现如日志记录、权限检查、数据验证等功能。理解如何创建自定义拦截器并将其链式组合使用。 5. **配置与注解**:Struts 2支持XML...

    webwork中文文档

    WebWork框架基于拦截器(Interceptor)的概念,提供了一种更加灵活的方式来处理HTTP请求。与传统的Servlet模型相比,WebWork提供了一个更加模块化和可扩展的框架,使得开发者能够更容易地管理和维护大型Web应用程序...

Global site tag (gtag.js) - Google Analytics