`
徜徉の小溪
  • 浏览: 448134 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts,ZK 各实现细粒度的权限验证控制(下)

    博客分类:
  • ZK
阅读更多

 

    上篇,所说为什么要用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就  不被创建

 

 

 

分享到:
评论

相关推荐

    java的细粒度权限和shiro权限校验 ssh

    9. **安全最佳实践**:为了提高系统的安全性,除了细粒度权限控制外,还需要注意其他安全措施,如输入验证、密码加密存储、防止SQL注入和XSS攻击等。 通过上述步骤,我们可以在SSH框架中充分利用Shiro实现细粒度的...

    Struts2拦截器实现权限控制demo

    在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

    struts2拦截器实现权限控制

    这些框架提供了丰富的API和配置选项,可以轻松地集成到Struts2中,实现细粒度的访问控制。 总之,Struts2拦截器是实现权限控制的一种高效手段,它们可以灵活地插入到应用程序的各个部分,而无需修改核心业务代码。...

    使用struts2拦截器对登陆权限验证

    在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...

    Struts2权限控制

    3. **注解方式**:除了XML配置,Struts2也支持使用注解在Action类或方法上直接声明拦截器,这样可以更方便地控制权限。 4. **共享数据**:在拦截器中,可以利用ActionContext或ThreadLocal等机制来传递和共享数据,...

    struts2的Ajax实现注册验证

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它被广泛应用于Java Web开发中,提供了灵活的架构支持。Ajax(异步JavaScript和XML)技术则为Web应用程序带来了增强的用户体验,允许页面部分刷新,而无需整体刷新...

    struts2拦截器实现用户登录权限的验证

    ### Struts2拦截器实现用户登录权限的验证 在Web应用开发中,用户登录权限验证是确保系统安全的重要环节之一。Struts2框架提供了一种灵活的方式来实现这一功能:通过自定义拦截器来控制用户的访问权限。下面我们将...

    struts实现的权限分配

    通过以上步骤,我们可以构建出一个完整的基于Struts的权限管理系统,实现对用户操作的精细控制,保障Web应用程序的安全运行。在实际开发中,要不断学习和适应新的技术和最佳实践,以提升系统的稳定性和可维护性。

    Struts2利用拦截器实现权限控制

    在权限控制场景下,拦截器尤为关键,可以用于验证用户是否有权访问特定的资源或执行特定的操作。 **1. 拦截器的工作原理** 拦截器是基于AOP(面向切面编程)的概念,它们在Action调用前后执行,形成一个处理请求的...

    struts2登录权限验证(带数据库)

    在"struts2登录权限验证(带数据库)"这个主题中,我们将深入探讨如何使用Struts2实现用户登录功能,并结合数据库进行权限验证。这个简单例子展示了如何将用户角色与权限管理集成到系统中。 首先,我们需要建立一个...

    struts2实现的简单登陆验证模块

    如果验证通过,通常会返回一个表示成功的字符串(如"success"),Struts2框架将根据配置决定下一步的操作,如跳转到主页。如果验证失败,可能会返回一个表示错误的字符串(如"error"),然后框架会展示相应的错误...

    struts的表单验证

    在Struts框架中,表单验证通常通过两个主要方式实现:客户端验证和服务器端验证。 1. 客户端验证: 客户端验证发生在用户的浏览器上,通常使用JavaScript或jQuery等库来执行。这种方式可以即时反馈错误,提高用户...

    struts2+spring+hibernate权限系统

    通过整合Struts2的拦截器、Spring Security的过滤器和Hibernate的数据持久化,可以实现用户登录验证、角色分配、权限检查等功能。 6. **限管理系统_s2sh**:这个文件可能是项目源代码或者是一个预配置的项目模板,...

    struts2 用拦截器 实现用户权限登录

    在Struts2中,拦截器是实现业务逻辑和控制流程之间解耦的关键组件。本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它...

    基于Struts的权限实现

    本文将深入探讨如何在Struts框架中实现权限控制,包括角色定义、资源访问控制等方面,并通过具体代码示例进行说明。 #### 二、角色与资源定义 在Struts框架中,权限管理主要涉及两个核心概念:角色(Role)与资源...

    struts1.3实现的Validator简单验证

    在Struts1.3中,Validator的主要目标是减少程序员编写验证逻辑的工作量,通过配置文件和自定义验证规则实现。这使得应用程序可以更加灵活地处理用户输入,并提供友好的错误提示。下面我们将详细介绍Struts1.3中...

    Struts————实现的验证登陆

    使用Struts做登录验证的步骤: 1 搭建环境: A 导包 B 建配置文件 struts-config.xml C 修改web.xml 2 建一个 ActionForm 3 建一个 Action 4 页面上面的事情

    Struts+spring+hibernate 集成实现的经典权限管理系统源代码

    总的来说,这个“Struts+Spring+Hibernate 集成实现的经典权限管理系统”提供了一个完整的解决方案,展示了如何在Java Web应用中有效地管理权限,同时也为开发者提供了一个学习和实践整合这三大框架的实例。...

    [浪曦原创]Struts系列 第6讲 Struts的验证框架Validate使用续二(zk001)

    Struts是Java Web开发中的一款经典MVC框架,它的验证框架Validate是用于处理用户输入验证的重要组件。在Struts的第六讲中,我们主要探讨了如何有效地利用Validate进行数据校验,以确保用户提交的信息符合应用程序的...

    用struts2实现session权限检查同时控制用户重复登录

    用struts2实现session权限检查同时控制用户重复登录

Global site tag (gtag.js) - Google Analytics