快速业务通道

使用JBoss jBPM实现流程访问和执行的授权 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
appendWhereClause("acl.deployment=deployment and acl.type=''"   + ACL.STARTER + "'' ", hql); appendWhereClause("((acl.userId in "   + Utils.createHqlUserString(userId) + ") or " + "(acl.groupId in "     + Utils.createHqlGroupString(userGroups) + ")) ", hql);

清单 6 为流程定义查询提供授权支持的额外where语句

额外的where语句是通过扩展现有查询实现和覆盖hlq方法实现的。

按照这种方法,扩展了以下查询:

部署查询

流程定义查询

流程实例查询

历史流程实例查询

历史活动 查询

历史细节查询

为了能够增加字符串实例变量,以缩小查询结果,我们还额外扩展了一个流程实例查询。

支持多种用户管理方式

使用JBoss jBPM实现流程访问和执行的授权(7)

时间:2011-08-09 infoq 译:胡键

以上给出的实现依赖使用执行环境来获得当前用户ID和使用IdentitySession来获得用户组成员关系。 jBPM分发包提供了这个接口的2个实现:

IdentitySessionImpl,基于jBPM的用户/组数据库

JBossIdmIdentitySessionImpl, 基于JBoss Identity IDM组件

不同于大量依赖其他技术的实现,对于我们的实现,我们决定把用户ID/组的获取同这些信息的保存分 离开来,使之可以被其他的jBPM实现利用(图5)。

图 5 用户管理实现

为了确保在设定和重新设定用户证书的时候环境是可用的,我们把这两个操作实现成了命令(清单7) ,这样,借助jBPM命令执行服务就可以正确设置执行环境。

public static class SetPrincipalCommand extends AbstractCommand<Void>  {   private static final long serialVersionUID = 1L;   private String userId;   private String[] groups;   public SetPrincipalCommand(String u, String...groups) { this.userId=u;  this.groups=groups; }   public Void execute(Environment environment) throws Exception {   environment.get(AuthorizationIdentitySession.class).setPrincipal(userId,groups);   return null;   } } public static class ResetPrincipalCommand extends AbstractCommand<Void> {   private static final long serialVersionUID = 1L;   public Void execute(Environment environment) throws Exception {   environment.get(AuthorizationIdentitySession.class).reset();   return null;   } }

清单 7 设置用户证书命令

把新命令和查询引入到jBPM执行中

由于jBPM并没有提供任何配置“命令——服务”关系的支持,为了能改变给定服务中的命令,就必须 使用调用新命令的新服务实现覆盖旧实现。清单8给出了一个使用新命令服务覆盖历史服务的例子。

public class NavteqHistoryServiceImpl extends HistoryServiceImpl {   @Override   public HistoryActivityInstanceQuery createHistoryActivityInstanceQuery() {   return new AuthorizedHistoryActivityInstanceQueryImpl(commandService);   }   @Override   public HistoryDetailQuery createHistoryDetailQuery() {   return new AuthorizedHistoryDetailQueryImpl(commandService);   }   @Override   public HistoryProcessInstanceQuery createHistoryProcessInstanceQuery() {   return newAuthorizedHistoryProcessInstanceQuery(commandService);   } }

清单 8 在历史服务中引入授权命令

总结

本文给出的这部分实现并没有扩展JPDL,而是扩展了被jBPM支持的所有语言都使用的JBos

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号