WEB开发网
开发学院软件开发Java 使用JBoss jBPM实现流程访问和执行的授权 阅读

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

 2010-05-11 00:00:00 来源:WEB开发网   
核心提示: 按照这种方法,扩展了以下查询:部署查询流程定义查询流程实例查询历史流程实例查询历史活动 查询历史细节查询为了能够增加字符串实例变量,使用JBoss jBPM实现流程访问和执行的授权(8),以缩小查询结果,我们还额外扩展了一个流程实例查询,而是扩展了被jBPM支持的所有语言都使用的JBoss PV

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

部署查询

流程定义查询

流程实例查询

历史流程实例查询

历史活动 查询

历史细节查询

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

支持多种用户管理方式

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

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

JBossIdmIdentitySessionImpl, 基于JBoss Identity IDM组件

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

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

图 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支持的所有语言都使用的JBoss PVM。结果是,这些语言都能够使用这个实现。

上一页  3 4 5 6 7 8 

Tags:使用 JBoss jBPM

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接