`
huadong19890803126
  • 浏览: 1191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

运用ralasafe中遇到的问题

阅读更多

前言:以下都是我自己的看法,如果有什么不足之处,请各位大侠指点。

 

       最近一个星期都在把ralasafe整合到项目里面,ralasafe是一个很好的中间件,把我们需要的权限都处理了,方便了

 

我们对权限的管理。但我在从ralasafe里读取权限树的时候,遇到了一个很奇怪的问题。我是这样设计的,在我的应用系

 

统中有ID为1的用户A1;在ralasafe中建立了一个R1的角色;并且建了p1、p2、p3三个权限,p2、p3是p1的子节点;

 

现在我把A1用户设置为R1角色,把权限p1、p2、p3授予R1角色。我在代码中如下调用ralasafe的权限树

      

      

Privilege privilege = WebRalasafe.getBusinessPrivilegeTree(req);
for ( Object ob : privilege.getChildren()) {
	Privilege pr = (Privilege)ob;
	System.out.println(pr.getName());
}

 

    但是上述的打印代码中,有时候能够打印有时候不能打印,我就很奇怪。于是我就下载了最新的源码,进行调试,当我

 

跟踪到UserRoleManagerImpl.java的public Privilege getBusinessPrivilegeTree(Object userId)这个方法的一

 

句代码Collection allBussinessPrivileges = pvlgMng.getAllBusinessPrivileges();时就查看里面的内容有个Id为0

 

pid为-2的privilege对象,这个对象在PrivilegeManagerImpl.java里的这段代码设置的

 

   

private synchronized void buildBusinessPrivilegeTree() {
	if (!businessPrivilegeTreeChanged)return;
	businessPrivilegeTree = new Privilege();
	businessPrivilegeTree.setId(Privilege.BUSINESS_PRIVILEGE_TREE_ROOT_ID);
	businessPrivilegeTree.setType(Privilege.BUSINESS_PRIVILEGE);
	businessPrivilegeTree.setIsLeaf(false);
	businessPrivilegeTree.setPid(Privilege.NULL_ROOT_ID);
	businessPrivilegeTree.setParent(null);
	allBusinessPrivilegesMap = new HashMap();
	Collection privileges = getAllBusinessPrivilegesFromDb();
	privileges.add(businessPrivilegeTree);
	buildTree(privileges, allBusinessPrivilegesMap);
	businessPrivilegeTreeChanged = false;
}

 

当我继续往下执行的时候,我发现在public Privilege getBusinessPrivilegeTree(Object userId)这个方法的下面,

 

又new出来了一个root的Privilege对象,这个root对象的id也为0,pid也为-2,也把它add到allBussinessPrivileges

 

中,这样导致了这个集合中有两个内容相同的对象,以至于下面返回的root对象的children有时候为空,有时候不为空。

 

     以上是小弟的说法,还请汪老大,出来帮帮指点指点.....

    

      也相信ralasafe以后会越来越完善,中国的开源就靠大家了.....

0
1
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java开源包1

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包11

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包2

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包3

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包6

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包5

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包10

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包8

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包7

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包101

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java资源包01

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

Global site tag (gtag.js) - Google Analytics