`
zybing
  • 浏览: 457889 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jBPM4.4+SpringSecurity用户合并到自己体系中来

阅读更多

 

jbPM4.4中的用户:

见:http://zybing.iteye.com/admin/blogs/778919


在jbpm.wire.bindings.xml配置中,
这2个和用户相关:
  <binding class="org.jbpm.pvm.internal.wire.binding.IdentitySessionBinding" />
  <binding class="org.jbpm.pvm.internal.wire.binding.IdentityServiceBinding" />
 
----------------
先看org.jbpm.pvm.internal.wire.binding.IdentityServiceBinding
这个是对外服务,提供的Identity Service类的绑定:
实现(主要的parse函数):
  public Object parse(Element element, Parse parse, Parser parser) {
    ObjectDescriptor descriptor = new ObjectDescriptor(IdentityServiceImpl.class);
    descriptor.addInjection("commandService", 
                        new ReferenceDescriptor(CommandService.NAME_TX_REQUIRED_COMMAND_SERVICE));
    return descriptor;
  }
这里加载了IdentityServiceImpl,实现了IdentityService接口;

IdentityServiceImpl实现了对外用户服务的功能,每个功能一个command;如:
  public void createUser(String userId, String givenName, String familyName) {
    commandService.execute ( new 
               CreateUserCmd(userId, givenName, familyName));
  }
创建用户,其实是创建一个CreateUserCmd命令,然后又commandService去执行;

看CreateUserCmd:
具体的执行是是调用IdentitySession的对应功能:
  public Void execute(Environment environment) throws Exception {
    IdentitySession identitySession = environment.get(IdentitySession.class);
    identitySession.createUser(userId, givenName, familyName, businessEmail);
    return null;
  }
 
再看其他的一些方法,也都是如此;都是调用IdentiitySession的对应功能;
 
--------------------------------------------------------------------------------
IdentitySession:
IdentitySession是内部实现用户功能的接口:

在jbpm.wire.bindings.xml配置中,
  <binding class="org.jbpm.pvm.internal.wire.binding.IdentitySessionBinding" />

先看org.jbpm.pvm.internal.wire.binding.IdentitySessionBinding
  public Object parse(Element element, Parse parse, Parser parser) {
    ObjectDescriptor objectDescriptor = new ObjectDescriptor(IdentitySessionImpl.class);
    objectDescriptor.addTypedInjection("session", Session.class);
    return objectDescriptor;
  }
 

是在加载IdentitySession:具体的实现是IdentitySessionImpl;

看IdentitySessionImpl中的具体方法:
  public String createUser(String userName, String givenName, String familyName,
    String businessEmail) {
    try {
      User user = findUserById(userName);
      if (user != null) {
        throw new JbpmException("Cannot create user, userId: [" + userName + "] has been used");
      }
    } catch(Exception ex) {
      throw new JbpmException("Cannot create user, error while validating", ex);
    }
    UserImpl user = new UserImpl(userName, givenName, familyName);
    user.setBusinessEmail(businessEmail);

    long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class).getNextId();
    user.setDbid(dbid);

    session.save(user);

    return user.getId();
  }
 
这个就是在调用数据库,获取数据了;


IdentitySession返回的用户,也是Interface: org.jbpm.api.identity.User;组是Group接口;
jBPM中的实现:org.jbpm.pvm.internal.identity.impl.UserImpl


--------------------------------------------------------------------------------
jBPM4.4改成自己的用户体系:
自己继承IdentitySession,实现接口方法;譬如为MyIdentitySessionImpl;

知道有2种方式把MyIdentitySessionImpl接入到系统中:
1. 自己实现一个IdentitySessionBinding,
   在配置文件jbpm.wire.bindings.xml配置中,
把这个注释掉
  <binding class="org.jbpm.pvm.internal.wire.binding.IdentitySessionBinding" />
绑定自己写的IdentitySessionBinding

2. 直接在transaction-context中指定自己的Session实现:
在配置文件jbpm.cfg.xml中:
<transaction-context>
  <object class="MyIdentitySessionImpl" />
</transaction-context>
 

==============================================================

SpringSecurity的(DB)用户:
见:http://zybing.iteye.com/admin/blogs/548085

SpringSecurity的用户配置为:authenticationManager

用Roller中的配置来说明一下:
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">  
    <property name="providers">  
        <list>  
            <ref local="daoAuthenticationProvider"/>   
            <!-- Uncomment this for LDAP/SSO configuration <ref local="ldapAuthProvider"/> -->  
            <!-- Uncomment this for CAS/SSO configuration <ref local="casAuthenticationProvider"/> -->  
            <ref local="anonymousAuthenticationProvider"/>                  
            <!-- rememberMeAuthenticationProvider added programmatically -->  
        </list>  
    </property>  
</bean>  
 
如果是用的DB的用户管理,authenticationManager配的是daoAuthenticationProvider;

daoAuthenticationProvider的配置:
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">  
     <property name="userDetailsService" ref="jdbcAuthenticationDao"/>  
     <property name="userCache" ref="userCache"/>   
</bean>  
 
daoAuthenticationProvider的配置属性有3个:
  1. userDetailsService: 这个负责从DB中获取用户对象
  2. userCache : 定义了用户对象如何缓存:
    有2个选项: 
    1. nullUserCache 不用缓存
    2. EhCacheBasedUserCache: 通过EhCache进行缓存(见下面的例子)
  3. passwordEncoder: 定义了用户口令如何加密的:
    有3个选项:
    1. PlaintextPasswordEncoder: 就用明文,不加密
    2. ShaPasswordEncoder:  用Sha加密
    3. Md5PasswordEncoder:用Md5加密
其中userDetailsService是主角。

cache配置如下:

 

<bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">  
    <property name="cache">  
        <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">  
            <property name="cacheManager">  
                <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>  
            </property>  
            <property name="cacheName" value="userCache"/>  
        </bean>  
    </property>  
</bean>  
 

 

userDetailsService:其中只有一个方法,就是loadUserByUsername,返回UserDetails接口(就是包括获取用户属性的一些方法)

UserDetails接口在SpringSecurity中有一个user类具体的实现;

UserDetails中,有一个方法是获取用户权限的,返回:grantedAuthority[], 这也是一个接口,就是获取到权限的名字,具体的实现GrantedAuthorityImpl。


==============================================================
把jBPM用户和SpringSecurity用户都整合到自己的系统中来:

自己的系统是SSH的,通过Hibernate访问数据库,进行ORM的,

jBPM也配置成通过spring整合Hibernate的方式;

自己系统中,配置自己的userService,

把jBPM以及SpringSecurity的从数据库获取用户的地方,改成通过自己的userService获取用户对象。

不过这样获取的用户对方是自己的类,还要在jBPM中,在SpringSecurity中,通过转换成他们系统的 用户实现类;

如果系统直接绑定了jBPM和SpringSecurity,自己的用户类就直接实现jBPM和SpringSecurity的用户接口,这样转换都省掉了,不过这样代码的适用范围就小了,看个人实际情况吧。




分享到:
评论

相关推荐

    JBPM4.4+spring+ext整合

    【JBPM4.4+Spring+EXT 整合详解】 JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程自动化。版本4.4是JBPM的一个重要里程碑,它提供了强大的工作流设计、执行和监控能力...

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合

    【JBPM4.4+Hibernate3.5.4+Spring3.0.4+Struts2.1.8整合】的整个过程涉及到多个关键组件的集成,这些组件都是Java企业级开发中的重要部分。首先,JBPM(Business Process Management)是一个开源的工作流引擎,它...

    Jbpm4.4 整合Spring Hibernate4

    在Jbpm4.4中整合Spring,可以利用Spring的这些优势,比如将Jbpm的流程实例管理、任务分配等操作集成到Spring容器中,实现流程服务的声明式配置和管理。 **3. Hibernate4整合** Hibernate4是流行的ORM(对象关系映射...

    jbpm4.4+ssh

    【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...

    jbpm4.4+spring2.5.6+hibernate 3.6+struts2.2.1 集成 保证运行成功

    这个集成项目是基于特定版本的这些技术,包括jbpm4.4(业务流程管理),spring2.5.6(依赖注入和事务管理),hibernate 3.6(对象关系映射),以及struts2.2.1(MVC框架)。下面将详细介绍这些组件以及它们如何协同...

    jbpm4.4+tomcat6+eclipse jee

    3. **持久化**:jbpm4.4使用JPA(Java Persistence API)来保存流程实例和相关数据到数据库中,确保数据的持久性和可恢复性。 4. **任务服务**:提供了一套API来处理任务的分配、接收、完成和查询,使得业务用户...

    jbpm4.4+s2sh请假流程例子

    【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...

    jbpm4.4+ssh整合

    jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习

    maven+jbpm4.4+Jboss5.0

    父项目中,根据Maven的规范,配置了相关依赖包的引用,包括:Jbpm4.4的引用包引用、Junit4.9的测试包引用,hibernate的引用包,以及应用服务器Jboss的Client引用等。 接口中,提供了部署流程、创建实例、获得当前...

    JBPM4.4+SSH2完整整合jar包 part1

    JBPM4.4整合SSH2的完整jar包,绝对可用!(注:此为第一部分,需要下载第二部分一起解压才可用,下载地址:http://download.csdn.net/detail/zf723182723/4385173)

    jbpm4.4 + ssh 案例

    首先感谢原创,相关信息请查询原创。... 看到好多朋友找不到相应的jar包,致使jbpm4.4的学习遇到困难,现提供除jbpm4.4自身jar包外的所有包,以便大家更快的学习jbpm4.4,希望能帮朋友们少走弯路!

    JBPM4.4+ssh2+流程图实例

    JBPM4.4还提供了可视化的流程设计器,用户可以通过拖拽方式构建流程图,大大简化了流程开发过程。 【SSH2】 SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他网络服务。SSH2...

    jbpm4.4+ssh2+sql server2000带jar包

    jbpm4.4提供了图形化的流程设计工具,支持工作流定义语言(WSDL),并且与Java EE应用服务器紧密集成,可以方便地在企业级应用中部署和运行流程。 【SSH2】在这里指的是Spring、Struts和Hibernate三个开源框架的...

    jbpm4.4+ssh+oracle + jqueryeasyui请假审批系统

    这个系统利用了jbpm4.4(Java Business Process Management)作为工作流引擎,SSH(Struts2、Spring、Hibernate)作为后端开发框架,Oracle数据库存储数据,以及jQuery EasyUI作为前端界面库。下面将详细介绍这些...

    java权限框架_ssh+shiro+jbpm4.4+lucene+easyui

    在本项目中,Shiro被用于权限控制,它可以灵活地根据用户的角色和权限来决定是否允许访问特定的资源,甚至细化到按钮级别,实现了细粒度的权限管理。 【JBPM4.4工作流引擎】 JBPM(Java Business Process ...

    jbpm4.4+servlet

    **jbpm4.4 + Servlet 知识点详解** jbpm4.4 是一个流行的开源工作流管理系统,它提供了一套完整的解决方案,用于设计、执行和管理业务流程。结合Servlet技术,可以构建出高效的Web应用程序,实现流程自动化。在这个...

    jbpm4.4+tomcat+s2sh

    【jbpm4.4+tomcat+s2sh】是一个基于Java EE的完整开发流程,它结合了jBPM 4.4(一个轻量级的工作流管理系统),Tomcat(一个流行的Java应用服务器),以及SSH(Struts2、Spring和Hibernate三大Java Web开发框架的...

    JBPM4.4+SSH2完整整合jar包

    【JBPM4.4+SSH2完整整合jar包】是一个包含了一系列Java库的压缩包,主要用于帮助开发者在Java环境中实现业务流程管理(BPM)与Spring(SSH中的S)、Struts(SSH中的H)和Hibernate(SSH中的H)的深度集成。...

Global site tag (gtag.js) - Google Analytics