快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
s="tomcat"> <start g="68,14,48,48" name="start" >   <transition to="end"/> </start> <end g="78,383,48,48" name="end"/> </process>

清单 2 具有用户授权信息的流程定义

我们引入了一个新类——ACL,针对给定流程 (processDefinitionID,processDefinitionKey, DeploymentID),它包含一个单独的访问列表(用户或 组,以及类型);同时还引入了相应的Hibernate 定义。

图3中,清单1的流程部署为具有两个角色(“user”和“starter”)的用户“any”创建了2个ACL; 而在图4中,清单2的流程部署将创建4 个——用户“mark”和组“tomcat”,每个都具有2个角色: “user”和“starter”。

图 3 无授权信息的流程的ACL

图 4 有用户授权信息的流程的ACL

这些ACL的生成是通过引入额外的部署器完成的,它将在“标准”jBPM部署器之后运行,抽取上面描述 的授权属性,为给定流程构建ACL。

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

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

保护jBPM命令

我们采用了一种通用的方法来保护jBPM命令,包括实现用于定义命令所需授权信息的自定义的注解, 以及处理这个注解的自定义的授权会话(命令拦截器)实现。

授权注解(清单3)可以指定所需的用户角色和表示某个流程的方法。

@Retention(value=RetentionPolicy.RUNTIME) @Target(value=ElementType.METHOD) public @interface AuthorizedCommand {   /** Access type */   public String role();   String key(); }

清单 3 授权注解

对于某个流程,用户角色——“starter”或“user”——指向某个用户应该拥有的角色。由于不同命 令既可以引用部署ID,也可以引用流程ID或者流程键值,因此注解支持多种指定键值的方式,允许将合适 的引用指定为键值。

清单4的授权拦截器检查是否有命令的方法被授权注解修饰。如果有,则执行适当的查询,确定出哪些 用户和用户组集合被授权给了这个命令,然后检查当前用户是 否属于他们。

………….. @SuppressWarnings("unchecked") public void checkPermission(Command<?> command, EnvironmentImpl environment)  { environment.setAuthenticatedUserId(environment.get (AuthorizationIdentitySession.class).getAuthenticatedUserId());   for( Method method : command.getClass().getMethods()) {   AuthorizedCommand sc = method.getAnnotation(AuthorizedCommand.class);   if(sc != null){    log.debug("Checking Class based Secured Function");    String ID = environment.get (AuthorizationIdentitySession.class).getAuthenticatedUserId();    Object value = null;    try {    log.debug("Checking authorization: " + command.getClass().getName());    Session session = environment.get(SessionImpl.class);    value = method.invoke(command, (Object[])null);    Query uQ = session.createQuery(userQuery.get(sc.key())).     setString("role", sc.role()).setString("value",(String) value);    Query gQ = session.createQuery(groupQuery.get(sc.key())).     setString("role", sc.role()).setString("value&q

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号