`
zhouxwyeah
  • 浏览: 21072 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

简述WPS独立定制安全性与WPS流程人工任务权限分配

    博客分类:
  • java
阅读更多
   这段时间一直在用IBM的WPS做一些工作流的东西,暂不谈其好坏,毕竟产品我们也做不了决定。下面将写一些在使用流程经常碰到的安全性和权限分配的问题。

   使用WPS,避免不了要配置其安全性,常用安全性方案分几种形式:联合存储库,本地操作系统,LDAP注册表,独立定制注册表。
 
   由于各种业务系统的特殊性,前面两种一般满足不了要求,而且当权限认证是通过一个通用的系统时候,LDAP也满足不了,独立定制注册表这种方式最为灵活,可以很好的和各种安全方案相结合,毕竟这种安全性是由你自己编码去决定的。

 


    定制用户注册表需要实现WebSphere Application Server的UserRegistry Java接口,只要实现了这个java接口,定制注册表可以支持任意类型的数据源,比如最常见的关系型数据库,文件系统等等。
用户安全名字(User Security Name):用于验证的用户名字,就如本地操作系统验证方式的用户名。
用户唯一ID(User Unique ID):每个用户对应的唯一ID。
用户显示名字(User Display Name):可选项,用于显示该用户的名字,比如在欢迎界面,相当于本地操作系统验证方式下的该用户的全名。
组安全名字(Group Security Name):用于验证的组的名字,就如本地操作系统的用户。
组唯一ID(Group Unique ID):每个组对应的唯一ID。
组显示名字(Group Display ID):可选项,用于显示该组的名字,比如在欢迎界面,相当于本地操作系统验证方式下的该组的全名。
UserRegistry接口的下列方法必须实现:
initialize:读取WPS中配置的连接信息,对变量进行初始化
checkPassword:此方法用来验证用户名以及密码是否合法,是整合用户数据库的关键
mapCertificate:mapCertificate方法从浏览器中X.509安全证书链映射成为用户名
getRealm:返回注册表所在域,比如在OS/400或是AIX上,应该返回系统的主机名,其他情况可以返回默认值"customRealm"。
getUsers:根据输入的用户pattern(样式)查找符合条件的用户列表,如A*,则返回所有A开头的用户,开发人员可以根据自己的要求来开发。返回的用户数如果过多,可以使用limit参数进行限制
getUserDisplayName:根据安全用户名(Security User Name),得到显示用户名(Display User Name),一般情况返回同样的名字即可。
getUniqueUserId:根据安全用户名,得到该用户的唯一ID。
getUserSecurityName:根据用户的唯一ID得到用户的安全用户名。
isValidUser:检查用户名是否合法。
getGroups:根据pattern(样式)查找符合条件的组列表,用法同getUsers。
getGroupDisplayName:根据组的安全名字,得到组的显示名字。
getUniqueGroupId:根据组的安全名字,得到组的唯一ID。
getUniqueGroupIds:得到包含某个用户的所有组唯一ID列表。
getGroupSecurityName:根据组的唯一ID得到组的安全名字。
isValidGroup:检查用户组是否合法。
getGroupsForUser:得到包含某个用户的所有组的安全名字列表。
getUsersForGroup :得到某个组的所有用户列表。
createCredential:在底层的WAS实现中,这个方法不会被call到,返回null即可。

   前面简单介绍了UserRegistry 接口,这里我将不讨论UserRegistry接口的实现和WPS安全性的配置,而主要是介绍安全性的应用和WPS人工任务分配的关系,相信大家应该都可以配置好安全性。

下面将介绍独立定制注册表安全性配置结束后,和应用结合的几个情况:

1.WEB登录。
在web.xml配置加入:
    <login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
  <form-login-page>/login.jsp</form-login-page>
  <form-error-page>/loginError.jsp</form-error-page>
  </form-login-config>
  </login-config>
  <security-role>
  <role-name>WebClientRole</role-name>
  </security-role>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>

    表明你使用的FORM登录方式,登录页面为/login.jsp,登录成功跳转到/index.jsp,登录失败跳转到/loginError.jsp。
而且login.jsp必须为以下写法
<FORM ACTION=’ j_security_check’>
<input name=’ j_username’ type=’text’/>
<input name=’ j_password’ type=’password/>
<input type=’submit’>
</FORM>
   假设我们已经配置了自定义安全性,独立定制注册表,安全性相关的类已经实现了UserRegistry的接口。

   这时登录,我们ACTION=’ j_security_check’,无需编写登录servlet,WPS容器会自动调用我们安全性的方法,顺序如下:

   首先我们会调用UserRegistry实现类的的checkPassword方法,该方法可实现业务系统自己的登录认证,参数j_username和j_password会传递给该方法。如果登录(即checkPassword验证成功)成功,该用户将获取一个身份(subject,类似javax.security.auth安全框架的subject),然后会依次调用UserRegistry实现类的getUniqueUserId,getUniqueGroupIds,getUserSecurityName方法,给该subject一些其他信息。

   根据前面的介绍,当登录成功后,该用户能够获取一个subject,该subject拥有他的userid,userSerurityName,以及根据getUniqueGroupIds他可以操作的机构。
用户通过认证,获得subject之后,有什么用处呢?下面继续看看。

2. EJB的调用安全性。
   其实这个很简单,也就是一些EJB,包括自己编写的,以及WPS自带的,都能对于自己的EJB程序进行安全保证,需要通过认证的用户才能调用他。
如以下配置:
<assembly-descriptor>
<security-role>
<role-name>serviceUser</role-name>
</security-role>
<container-transaction>
<method>
<ejb-name>AuditService</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
   规定了该EJB存在安全的配置,存在了角色对应某些方法的安全性映射,比如这里角色serviceUser就对应了EJB AuditService所有方法,对应WPS中的配置如下:



    其中配置就说明了,EJB中的某些角色对应的某些方法,什么情况能够被外界调用,上图是WPS中默认的BPM API 的配置,其中大部分说明了,BPM的API只有被认证的用户才能调用,这也是前面为什么配置安全性的原因之一,只有通过安全认证,获得了subject,这样才能调用符合配置的EJB。


3. 人工任务的分配。

   总所周知,WPS的人工任务分配是项目中的重点,流程大部分存在的原因也是因为人工任务的,毕竟业务是人来参与的,人参与就涉及到权限的分配,这种我们将讨论常用的几种任务分配方式,毕竟分配权限的方案实在太多,很多时候可能WPS的任务分配甚至也完成不了业务需求,我们针对常用的几种方式讨论一下:
PS: 一下讨论默认分配的为potenion owner,其它 administrator,editor的是一样的。

  3.1  User by userID



   该方案分配到人,下面有个必填选项UserID变量,当我们将业务变量赋与 UserID变量,这样的该人工任务就分配到UserID,这样我们将可以在流程编排器里面看到该任务的potenion owner就是该变量的值。


   对应于自定义安全性,当我们的subject登录之后,会调用UserRegistry接口实现类的getUniqueUserId方法,当他的返回值和UserId 变量一致时,该subject是该任务的potenion owner

总结:
分配:  User by userID  的 UserId 对应UserRegistry接口实现类的getUniqueUserId方法

3.2 Users By user id

该任务是分配给多个人的,也需要至少配置一个参数 UserId.

当流程到达该人工任务时,WPS会调用UserRegistry的getUsers方法,返回该任务所有的潜在所有者集合。

只有通过认证的subject的getUniqueUserId返回的值在getUsers方法的结果集合中,该subject就能操作该人工任务。

总结:   Users By user id   对应UserRegistry接口实现类的getUsers方法。

3.3  Group Members

   任务分配给组员,需要配置两个参数,groupNames(组名), IncludeSubgroups(是否包含子组)

  配置了组名之后,当流程到达该任务的时候,会调用UserRegistry实现类的getUsersForGroup方法,返回一个人员的集合
和上面一样这个任务一样是分配到人的只有通过认证的subject的getUniqueUserId返回的值在getUsersForGroup方法的结果集合中,该subject就能操作该人工任务。

总结:   Group Members   对应UserRegistry接口实现类的getUsersForGroup方法。

3.4 Group

   该任务分配到组。
   注意到该任务和前面的不一样,前面的部分都是分配到人,这样对于业务场景可用性比较低,分配到组的话,我们可以对相同权限的人分组,这样对于业务场景下的人工任务分配或者是WPS的BPEDB的压力缓解都很有效。

   这里配置了变量分配给GroupID,这样流程到达该节点的时候,该人工任务的潜在所有者为该变量groupId的值。

   前面我们论述过了,一个通过认证的subject,会调用UserRegistry接口实现类的getUniqueGroupIds得到他所能操作的组,只要该SUBJECT能操作的组包括了groupId,该SUBJECT就能操作该人工任务。

  3.5 Group Search

    其实该分配方式和Group Member基本相似,都是通过组来查找组员。只是查找的方式不一样,这里的Group Search是先调用UserRegistry接口实现类的getGroups,得到匹配的多个组,然后通过多个组作为参数,调用UserRegistry接口实现类的getUsersForGroup,得到多个组符合要求的人员列表,都是该任务的潜在所有者。

   和前面一样,subject的getUniqueUserId返回的值在getUsersForGroup方法的结果集合中,该subject就能操作该人工任务。

  总结: Group Search对应UserRegistry  的 getGroups,getUsersForGroup方法。
 
    其实分配的方式有很多,这里我只是谈到我用到的这几种,还有其他的分配方式我没有试过,没有发言权,这是我最近这段时间使用WPS流程做项目的一点心得,WPS这东西,我也不骂他,也不恨他,也不喜欢他,但是我还是要用他。。。上面只是我自己的最近的一些总结,写的肯定不是很完善,也肯定有很多错误,希望大家来指正。
    希望写的东西对有需要的人有所帮助。
  • 大小: 15.8 KB
  • 大小: 12.9 KB
  • 大小: 10.4 KB
3
0
分享到:
评论
1 楼 jianghs 2009-05-08  
写的好,希望楼主能多发这样的学习文章。

相关推荐

    呼吸道执业暴露后的处理流程.wps

    呼吸道执业暴露后的处理流程.wps

    人工智能的诞生简述.pptx

    人类智能与人工智能的关系复杂且微妙。尽管人工智能在某些特定任务上已经超过了人类,例如围棋和象棋等游戏,但整体上,人类智能的复杂性和适应性仍远超当前的人工智能。人工智能并不是生命现象,而是基于算法和数据...

    信息安全的简述

    信息安全的概述,基本简述了信息安全的各个方面。

    人工智能简述.pptx

    "人工智能简述.pptx" 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,涉及到数学、计算机科学、心理学、哲学和语言学等学科。人工智能的主要应用包括机器人、...

    管理流程设计方法简述及示例

    ### 管理流程设计方法简述及示例 #### 一、管理流程设计方法简述 管理流程设计是组织内部为了实现特定目标而设定的一系列有序活动的组合。良好的管理流程不仅能够提高工作效率,还能确保组织目标的有效达成。本文...

    简述人工智能与人类智能.doc

    《简述人工智能与人类智能》 人工智能(AI)这一概念自1956年Dartmouth会议上被提出以来,已成为科技领域的重要课题。AI的研究旨在通过理论、方法、技术和应用系统的开发,模拟、延伸和扩展人类智能。它涵盖了一...

    网络数学模型与人工智能数学公式表示法简述.pdf

    本文深入探讨了网络数学模型的建立以及如何将其应用于人工智能网络中,以简化网络逻辑关系,提升网络的性能和安全性。 首先,网络数学模型的主要作用是将复杂的网络结构转化为简单的数学表达。在计算机网络中,网状...

    人工智能芯片框架简述说明

    ### 人工智能芯片框架简述说明 #### 一、引言 随着人工智能技术的快速发展,特别是机器学习领域的突破性进展,其应用已经渗透到生活的各个方面,包括但不限于自动驾驶、医疗诊断、金融风控、智能家居等领域。其中...

    咖啡因工艺流程简述.doc

    咖啡因工艺流程简述.doc

    角色权限系统

    为了便于理解,简述操作流程:1,建立角色A,并给角色分配权限。2,新建用户B,给B分配角色A,从此B就拥有了A的权限。至于建立菜单,给角色重新分配权限,给用户从新分配角色等内容,留给你们自己吧。

    Unix/linux系统的安全性概述

    Unix/linux系统的安全性概述 对于网站管理人员而言,日常性的服务器安全保护主要包括四方面内容: 文件存取合法性:任何黑客的入侵行为的手段和目的都可以认为是非法存取文件,这些文件包括重要数据信息、主页页面 ...

    Android四大组件简述

    在"Android四大组件简述"这个项目中,你可以找到关于这些组件的示例代码和实践应用,通过学习和调试这些示例,可以更深入地理解四大组件的工作原理和使用方式。这将对提升你的Android开发技能大有裨益。

    人工智能技术在石油石化行业中的发展趋势.pdf

    除了水下机器人,人工智能还应用于其他多个环节,如数据分析、流程优化、故障诊断、预测性维护和供应链管理等。人工智能的机器学习算法可以从历史数据中学习,通过持续的训练不断优化预测模型的准确性。例如,在石油...

    网络关键设备和网络安全专用产品安全认证简述.pdf

    网络关键设备和网络安全专用产品安全认证简述.pdf

    人工智能的诞生简述22.pptx

    【人工智能的诞生与简述】 人工智能(Artificial Intelligence, AI),是20世纪科学进步的产物,它旨在通过计算机模拟人类智能,使机器能够完成人类通常需要智能才能完成的任务。这个概念的诞生源于人类对自动化和...

    国美业务操作规则与流程简述.docx

    《国美业务操作规则与流程详解》 ...从合同授权到协议审批,每一步都遵循严格的权限制度和审批流程,确保业务的合规性和透明度。这种规范化操作模式对于大型零售企业来说,是实现高效运营和风险控制的关键。

    网上书店基本流程,业务流程图,数据流程图

    网上书店的运营涉及到一系列复杂而有序的业务流程,这些流程旨在为用户提供便捷、高效和安全的购书体验。本文将详细解析网上书店的基本流程,包括业务流程和数据流程,以便理解其背后的运作机制。 首先,我们从用户...

Global site tag (gtag.js) - Google Analytics