- 浏览: 448131 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (108)
- Ibatis (0)
- ZK (13)
- 设计模式 (3)
- Java编程 (21)
- 正则表达式 (2)
- 开发小续 (2)
- 杂谈 (1)
- 数据库 (6)
- Hibernate (6)
- Struts 2 (2)
- Spring (2)
- 版本控制 (4)
- Subversion (1)
- Myeclipse (1)
- EL (1)
- jsp (1)
- CAS (1)
- SSO (1)
- Restful Web Service (3)
- jersey (2)
- jersey与spring (1)
- web service框架 (1)
- 系统分析 (1)
- Subversion windows service (1)
- tomcat (1)
- PermGen Space (1)
- 编程心得 (1)
- google map api (1)
- springmvc (1)
- ajax (1)
- Hibernate QBC (1)
- oracle oracle10g (1)
- RBAC 权限设计 (1)
- springsecurity 3 (1)
- JPA (1)
- JPA j2ee (1)
- maven java (1)
- Jquery框架 UI框架 (1)
- printcss (1)
- java reflect 反射 (1)
- Jquery框架 UI框架 3scschool (1)
- collabnet Subversion (1)
- linux redhat (1)
- mysql (3)
- spring spring-data-jpa (1)
- Jquery AjaxForm (1)
- Jquery Map (1)
- linux (3)
- linux nginx openssl zlib pcre (1)
- linux jdk (1)
- 物联网技术 嵌入式 C# (1)
- oracle 数据库 (1)
- oracle (5)
- maven (1)
- java 定时器 (1)
- swing (1)
- java (2)
- 短信接口 (1)
- DBUtils (1)
- JDBC (1)
- javascript json (1)
- shiro (1)
- 权限系统 (1)
- 嵌入式 (1)
- 树莓派 (1)
- python (1)
- Github (1)
- 代码托管 (1)
- 产品设计 (2)
- 产品需求 (2)
- BRD (1)
- MRD (1)
- PRD (1)
- DRD (1)
- FRD (1)
- GIS (1)
- SOA (1)
- 网站资源 (1)
- 骆驼 (1)
- 黑客技术资源 (1)
- 网络安全资源 (1)
- 个人修炼 (1)
- Angular2 (1)
- Nodejs Krakenjs (1)
最新评论
-
GeorgeFeng:
学习啦,感谢
RBAC用户权限管理数据库设计 -
徜徉の小溪:
yuanliangding 写道请求进来时,创建的对象都不是由 ...
基于RESTful Web Service 的Jersey框架与Spring完美整合 -
yuanliangding:
请求进来时,创建的对象都不是由Spring弄出来的。。
基于RESTful Web Service 的Jersey框架与Spring完美整合 -
Ripin_Yan:
我已经按照你的xml这个顺序配置了,结果还是中文乱码。是还有什 ...
SpringMVC使用注解@ResponseBody返回json中文乱码 -
王静娜:
作者的实体图画的很好很有条理,但是个人觉得用户组对应的是资源, ...
RBAC用户权限管理数据库设计
上篇,所说为什么要用Stringbuffer的拼接来存储权限集合,而不用List或者Map集合
对于List或者Map List接口是对Collection进行了简单的扩充,它的泛化类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,存储对象会其元素顺序是按照加入顺序排列的,当如果循环存储,或者删除,都会进行排序,将对遍历的所有对象开辟N个空间,消耗占内存.Map是键值对是以哈希表的方式存储没有排序.但也消耗内存.具体的就不多讲了.
Stringbuffer 和string的拼接 又有性能上的差异,String 虽然是final类,String是原型类型,类似基本类型,就是说, 对他的修改都会创建一个新的对象,例如String s ="abc"; 修改String s="abc"+"c"
对象"abc" 与"abc"+"c"不是同一个对象,String字符串的拼接一般会重复创建string对象,StringBuffer与StringBuilder这两个类是为字符串设计的,后者是一个线程安全的类,
设计这两个类就是解决string反复创建新对象的问题,为什么StringBuffer一般效率高于String,是因为StringBuffer是一个Buffer,有一个字符缓冲数组,默认分配16个字符.
所以选用StringBuffer来存储权限集合对象.
package com.linktel.linkFax.web.zk.util; import java.util.List; import org.zkoss.zkplus.spring.SpringUtil; import com.linktel.linkFax.LinkFaxContext; import com.linktel.linkFax.domain.Authority; import com.linktel.linkFax.domain.Resource; import com.linktel.linkFax.domain.Role; import com.linktel.linkFax.domain.User; import com.linktel.linkFax.service.ResourceService; public class AuthorityTools { /** * 通过资源名称查找功能权限 与登录用户所属角色所拥有的权限对比, 如果功能权限被授权的话返回授权; * * @param resourceName * 功能资源名称; * @return */ public static boolean hasPermission(String resourceName) { StringBuffer authoritiesStr=(StringBuffer ) ZkUtils.getSessionAttr(LinkFaxContext.CURRENT_AUTHORITIESSTR); ResourceService service = (ResourceService) SpringUtil .getBean("resourceService"); Resource resource = service.getResourceByValue(resourceName); List<Authority> authoritiesResource = resource.getAuths(); for (Authority authority : authoritiesResource) { int index = authoritiesStr.indexOf(authority.getName()); if (index >= 0) { return Boolean.TRUE; } } return Boolean.FALSE; } }
以上内容是自己写了一个可重用的工具类,这个工具类是针对于循环遍历所操作的resource资源来验证当前登录的用户是否是有权限,如有权限就返回true 如没有就返回false
具体实现是这样的 之前我们把所有角色的权限放入了StringBuffer中 现在我们只要通过当前用户操作的resource资源
中的所包含的权限名称去比对角色中的权限名称
authoritiesStr.indexOf(authority.getName());
接下来就是在页面初始化的时候去绑定后台类对象
<?xml version="1.0" encoding="utf-8"?> <?page id="userPage"?> <?xel-method prefix="c" name="hasPermission" class="com.linktel.linkFax.web.zk.util.AuthorityTools" signature="com.linktel.linkFax.web.zk.util.AuthorityTools hasPermission(java.lang.String)"?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./userWin"?> <window id="userWin" width="100%">
<div if="${c:hasPermission('CompanyUser')}"> <label value="按公司条件查询:"></label> <combobox id="cbxCompany" model="@{userWin.companyList}" selectedItem="@{userWin.company}" readonly="true"> <comboitem self="@{each=company}" label="@{company.name}"></comboitem> </combobox> </div> <separator width="260px" bar="true"></separator> <div if="${c:hasPermission('DeptUser')}"> <label value="按部门条件查询:"></label> <combobox id="cbxDept" model="@{userWin.deptList}" readonly="true" selectedItem="@{userWin.dept}"> <comboitem self="@{each=dept}" label="@{dept.name}"></comboitem> </combobox> </div>
</window>
<?xel-method prefix="c" name="hasPermission"
class="com.linktel.linkFax.web.zk.util.AuthorityTools"
signature="com.linktel.linkFax.web.zk.util.AuthorityTools hasPermission(java.lang.String)"?>
绑定后台类的指令
<div if="${c:hasPermission('CompanyUser')}">
if(${c:hasPermission('资源名称')}) 如果之前后台方法返回的是true 那么在加载的时候组件被创建,如果是false就 不被创建
发表评论
-
ZK fulfill 属性的延迟加载组建
2010-08-19 11:01 1881fulfill属性 fulfill属 ... -
ZK加载页面的生命周期
2010-08-04 17:26 2174加载页面的活动周期 ... -
ZK使用JQuery实现动态效果
2010-07-15 11:26 4035<?xml version=" ... -
(转)ZK框架初步总结【二】---关于server-push
2010-07-05 09:32 2539关于ZK框架的服务推 ... -
ZK 获取客户端事件状态的问题 ?
2010-07-02 17:37 2287ZK Client Programming, 在客户端编程.触 ... -
ZK客户端编程之Checkbox复选框的(全选/全不选)
2010-07-01 13:16 4788on June 30, 2010, I have met a ... -
Struts,ZK 各实现细粒度的权限验证控制(上)
2010-06-28 15:26 1814权限控制我们有很多种实现的方法,而对于不同的UI编 ... -
ZK 5.0.2版本中constraint 验证不符合规范时却不能中断zul向后台提交
2010-06-24 16:17 1995ZK 5.0.2版本中constraint 验证不符合规范时却 ... -
ZK 3.6.4和5.0.2版本servlet线程与事件处理线程的配置区别
2010-06-22 13:32 2092默认情况下,ZK的过程中一个独立的线程的事件称为事 ... -
ZK 多个下拉菜单动态级联绑定对象
2010-06-13 09:23 5032//前台页面的zul文件 =========== ... -
ZK 5.0.2 报错信息的Bug
2010-06-04 13:55 3129xml <listbox id=&q ... -
ZK Paging组件实现动态分页,描述很通俗易懂
2010-05-28 11:41 5212zul页面: zul 页面: < ...
相关推荐
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应用程序的安全运行。在实际开发中,要不断学习和适应新的技术和最佳实践,以提升系统的稳定性和可维护性。
在权限控制场景下,拦截器尤为关键,可以用于验证用户是否有权访问特定的资源或执行特定的操作。 **1. 拦截器的工作原理** 拦截器是基于AOP(面向切面编程)的概念,它们在Action调用前后执行,形成一个处理请求的...
在"struts2登录权限验证(带数据库)"这个主题中,我们将深入探讨如何使用Struts2实现用户登录功能,并结合数据库进行权限验证。这个简单例子展示了如何将用户角色与权限管理集成到系统中。 首先,我们需要建立一个...
如果验证通过,通常会返回一个表示成功的字符串(如"success"),Struts2框架将根据配置决定下一步的操作,如跳转到主页。如果验证失败,可能会返回一个表示错误的字符串(如"error"),然后框架会展示相应的错误...
在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...
通过整合Struts2的拦截器、Spring Security的过滤器和Hibernate的数据持久化,可以实现用户登录验证、角色分配、权限检查等功能。 6. **限管理系统_s2sh**:这个文件可能是项目源代码或者是一个预配置的项目模板,...
在Struts2中,拦截器是实现业务逻辑和控制流程之间解耦的关键组件。本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它...
本文将深入探讨如何在Struts框架中实现权限控制,包括角色定义、资源访问控制等方面,并通过具体代码示例进行说明。 #### 二、角色与资源定义 在Struts框架中,权限管理主要涉及两个核心概念:角色(Role)与资源...
在Struts1.3中,Validator的主要目标是减少程序员编写验证逻辑的工作量,通过配置文件和自定义验证规则实现。这使得应用程序可以更加灵活地处理用户输入,并提供友好的错误提示。下面我们将详细介绍Struts1.3中...
使用Struts做登录验证的步骤: 1 搭建环境: A 导包 B 建配置文件 struts-config.xml C 修改web.xml 2 建一个 ActionForm 3 建一个 Action 4 页面上面的事情
总的来说,这个“Struts+Spring+Hibernate 集成实现的经典权限管理系统”提供了一个完整的解决方案,展示了如何在Java Web应用中有效地管理权限,同时也为开发者提供了一个学习和实践整合这三大框架的实例。...
Struts是Java Web开发中的一款经典MVC框架,它的验证框架Validate是用于处理用户输入验证的重要组件。在Struts的第六讲中,我们主要探讨了如何有效地利用Validate进行数据校验,以确保用户提交的信息符合应用程序的...
用struts2实现session权限检查同时控制用户重复登录