权限控制我们有很多种实现的方法,而对于不同的UI编程不同的开源框架,都能各施其法
比如说有像Struts 中需要细粒度的控制到按钮级别的权限,我们可以使用url拦截过滤来实现权限验证功能.而比如使用ZK框架的时候我们就发现URL拦截器不在适合这种环境了,ZK是一个与一些我们比较熟知的Ext,JSF Web框架一样的Ajax框架.他们的共同点是基于组件,能快速方便的实现对UI设计.
ZK 是一个事件驱动(dvent-driver),基于组件(component),是处理用户活动而引发的事件.ZK处理用户请求分两个阶段,一个是url请求的,一个是Zk Client Engine 发送的请求,
1.用户第一次请求时,是一个URL Request,由zk Loader Servlet处理,对应web.xml中的 org.zkoss.zk.ui.http.DHtmlLayoutServlet
2.响应客户页面以后,ZK AU Engine与 Zk Client Engine交互,如果不调用(sendRedirect),那么都是事件驱动
当用户点击一个按钮时,首先,ZK Client Engine获得这个事件,然后ZK Client Engine发送这个事件到服务器Zk AU Engine,这个数据格式是类json格式.Zk AU Engine接收到这个事件,加入到事件队列,ZK AU Engine处理队列里的事件,然后将出列结果返回给ZK Client Engine.ZK Client Engine处理服务器响应,如果发现需要更新页面 Zk Client Engine更新页面组件Zk使用两个不同的Servlet处理.
针对这两个完全不同实现的框架可以采用不同的权限验证方法.
一、Struts 的页面交互是通过url请求提交给相应的Action类来处理
我们可以采用 Filter 过滤机制
拦截 url 做权限判断
对于 web 系统,权限表有这么几个字段:标识、名称、描述、对应 url 。
那么对于 url 请求,可以在权限表进行查找,查看该 url 是否有个对应的权限。如果有,说明该 url 需要具有没个权限才能访问,那么通过 RBAC 算法进行判断即可。如果在权限表没有找到对应记录,说明该 url 不需要进行权限验证。
该需求比较简单,也可以采用 Filter 机制,不妨取名 UrlAclFilter 。
唯一需要注意的地方是:权限表对应的 url 可能带有参数。比如 customreManager?op=add 是增加客户权限, customerManager?op=delete 是删除客户权限。
伪代码如下:
Java代码
if( needPrivilegeCheck( request ) ) {
// 需要做权限判断
if( session.getAttribute( “user” ) ==null ) {
// 用户还没有登录,转移到登录界面
redirect( loginPage, request, response );
return;
} else {
if( userManager.hasPrivilege( user, privilegeId ) ) {
filter.doChain( request, response );
return;
} else {
redirect( forbiddenHintPage, request, response );
return;
}
}
}
基础数据库表
权限表,该表基本有这么几个字段:标识、名称、描述、指向 url 、 target 。 target 表示点击该 Url 时在那个窗口显示。标识为主键。
比如下图所示 frameset ,权限菜单 target 属性应该是: MAIN
角色表,该表字段:标识、名称、描述;标识为主键。
权限-角色关系表,该表有字段:角色标识、权限标识;角色标识和权限标识为复合主键。
用户-角色关系表,该表有字段:用户标识、角色标识;用户标识和角色标识为复合主键。
===============================================================================
而ZK基于组件的权限验证我们可以使用以下实现方法
基础数据库表
权限表,该表基本有这么几个字段:ID主键、名称、描述 (对系统使用者而言我们可以授权下一级用户的权限,对应的角色有多少权限都在权限表中存下)
资源表 字段:Id主键、资源名称、资源类型(注:如button,menu)、对于整个系统的所有用到的资源集合这是固定不变的.(一个系统当需求确定下,所有的资源是固定的)
角色表 字段 Id主键、名称、描述、是否可删除(一个系统必须有一个超级管理员且无法删除)、
权限-角色关系表,该表有字段:角色标识、权限标识;角色标识和权限标识为复合主键。
用户-角色关系表,该表有字段:用户标识、角色标识;用户标识和角色标识为复合主键。
当我们创建新用户时,将用户分配角色,再将对角色授权.这样我们的数据表结构就设计好了
下面是具体业务的实现:
首先我们将需要用到的全局变量全部放在一个类中以便后期的维护.
package com.linktel.linkFax;
import com.linktel.linkFax.domain.User;
import com.linktel.linkFax.web.zk.util.ZkUtils;
public class LinkFaxContext {
public static final String CURRENT_USER = "user";
public static final String CURRENT_AUTHORITIESSTR = "authoritiesStr";
public static final String UPLOAD_LOGOS="/logos/";
public static User currentUser() {
return (User) ZkUtils.getSessionAttr(CURRENT_USER);
}
}
然后我们再创建一个初始化页面的类实现Initor 接口 (注:当我们实现了Initor接口后我们在页面绑定该类,在页面被加载的时候先会进入public void doInit(Page page, Map arg1) throws Exception {}方法 我们在init()方法中可以读取所有的角色对应的权限将它每个权限名称都以都分隔符隔开保存到一个String 字符串里(如:accesssCreateUser,accessAddUser,accessUpdateUser)再将拼接完的权限的集合保存到session中
(注:为什么要把所有的权限名称放到string中拼接而不是直接放入List或者Map集合中?答:请看下一篇,写不下了);
分享到:
相关推荐
9. **安全最佳实践**:为了提高系统的安全性,除了细粒度权限控制外,还需要注意其他安全措施,如输入验证、密码加密存储、防止SQL注入和XSS攻击等。 通过上述步骤,我们可以在SSH框架中充分利用Shiro实现细粒度的...
在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...
这些框架提供了丰富的API和配置选项,可以轻松地集成到Struts2中,实现细粒度的访问控制。 总之,Struts2拦截器是实现权限控制的一种高效手段,它们可以灵活地插入到应用程序的各个部分,而无需修改核心业务代码。...
在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...
3. **注解方式**:除了XML配置,Struts2也支持使用注解在Action类或方法上直接声明拦截器,这样可以更方便地控制权限。 4. **共享数据**:在拦截器中,可以利用ActionContext或ThreadLocal等机制来传递和共享数据,...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它被广泛应用于Java Web开发中,提供了灵活的架构支持。Ajax(异步JavaScript和XML)技术则为Web应用程序带来了增强的用户体验,允许页面部分刷新,而无需整体刷新...
### Struts2拦截器实现用户登录权限的验证 在Web应用开发中,用户登录权限验证是确保系统安全的重要环节之一。Struts2框架提供了一种灵活的方式来实现这一功能:通过自定义拦截器来控制用户的访问权限。下面我们将...
通过以上步骤,我们可以构建出一个完整的基于Struts的权限管理系统,实现对用户操作的精细控制,保障Web应用程序的安全运行。在实际开发中,要不断学习和适应新的技术和最佳实践,以提升系统的稳定性和可维护性。
综上所述,通过Struts2的拦截器,我们可以实现高效且可扩展的权限控制系统。在`Struts2_Authority`压缩包文件中,可能包含了实现上述功能的示例代码,包括自定义拦截器的实现、配置文件以及相关的Action和视图文件,...
在"struts2登录权限验证(带数据库)"这个主题中,我们将深入探讨如何使用Struts2实现用户登录功能,并结合数据库进行权限验证。这个简单例子展示了如何将用户角色与权限管理集成到系统中。 首先,我们需要建立一个...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java Web开发,尤其在企业级应用中占据重要地位。本示例“struts2实现的简单登陆验证模块”旨在展示如何利用Struts2框架进行用户登录验证。在深入讲解...
在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...
通过整合Struts2的拦截器、Spring Security的过滤器和Hibernate的数据持久化,可以实现用户登录验证、角色分配、权限检查等功能。 6. **限管理系统_s2sh**:这个文件可能是项目源代码或者是一个预配置的项目模板,...
在Struts2中,拦截器是实现业务逻辑和控制流程之间解耦的关键组件。本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它...
本文将深入探讨如何在Struts框架中实现权限控制,包括角色定义、资源访问控制等方面,并通过具体代码示例进行说明。 #### 二、角色与资源定义 在Struts框架中,权限管理主要涉及两个核心概念:角色(Role)与资源...
4. 错误处理:当验证失败时,Validator会将错误信息添加到ActionMessage集合中,这些信息可以通过Struts的标签库显示在用户界面上。错误消息可以使用i18n(国际化)支持,方便多语言环境的应用。 5. 表单域关联验证...
使用Struts做登录验证的步骤: 1 搭建环境: A 导包 B 建配置文件 struts-config.xml C 修改web.xml 2 建一个 ActionForm 3 建一个 Action 4 页面上面的事情
Struts是Java Web开发中的一款经典MVC框架,它的验证框架Validate是用于处理用户输入验证的重要组件。在Struts的第六讲中,我们主要探讨了如何有效地利用Validate进行数据校验,以确保用户提交的信息符合应用程序的...
总的来说,这个“Struts+Spring+Hibernate 集成实现的经典权限管理系统”提供了一个完整的解决方案,展示了如何在Java Web应用中有效地管理权限,同时也为开发者提供了一个学习和实践整合这三大框架的实例。...
最后,在JSP页面上,我们可以使用Struts2的标签库来显示错误消息,如`<s:fielderror>`,这样当验证失败时,用户就能看到相应的错误提示。 总结起来,Struts2的XML表单验证是通过创建XML文件定义验证规则,然后在...