You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署WSO2 EI 6.4.0无法新增用户/角色问题求助

WSO2 EI 6.4.0(Docker部署)PostgreSQL用户管理异常解决方案

问题诊断

1. 角色列表异常

执行角色新增/列表操作时,无法显示admin、internal/everyone等默认角色,报错Cannot change transaction isolation level in the middle of a transaction。原因是PostgreSQL不允许在事务执行过程中修改隔离级别,而WSO2部分组件逻辑触发了该操作。

2. 新增用户角色加载失败

新增用户时提示Error occurred while getting hybrid roles from filter : %。原因是PostgreSQL中%作为通配符未被正确处理,导致角色查询SQL执行失败。


解决方案

一、修复事务隔离级别问题

  1. 修改主数据源配置
    编辑WSO2 EI的master-datasources.xml(Docker部署需挂载该文件到容器内<EI_HOME>/repository/conf/datasources/路径),在PostgreSQL数据源配置中添加defaultTransactionIsolation参数,指定与PostgreSQL默认一致的隔离级别:
    <datasource>
        <name>WSO2_CARBON_DB</name>
        <description>The datasource used for registry and user manager</description>
        <jndiConfig>
            <name>jdbc/WSO2CarbonDB</name>
        </jndiConfig>
        <definition type="RDBMS">
            <configuration>
                <url>jdbc:postgresql://your-db-host:5432/wso2carbon</url>
                <username>dbuser</username>
                <password>dbpass</password>
                <driverClassName>org.postgresql.Driver</driverClassName>
                <defaultAutoCommit>false</defaultAutoCommit>
                <!-- 指定事务隔离级别为PostgreSQL默认的READ_COMMITTED -->
                <defaultTransactionIsolation>READ_COMMITTED</defaultTransactionIsolation>
                <maxActive>50</maxActive>
                <maxWait>60000</maxWait>
                <testOnBorrow>true</testOnBorrow>
                <validationQuery>SELECT 1</validationQuery>
                <validationInterval>30000</validationInterval>
            </configuration>
        </definition>
    </datasource>
    

二、修复角色过滤通配符问题

  1. 调整用户存储SQL模板
    编辑user-mgt.xml(挂载到容器内<EI_HOME>/repository/conf/路径),找到JDBC用户存储配置块,修改角色查询相关的SQL属性,确保通配符正确拼接:

    <UserStoreManager class="org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager">
        <!-- 其他配置省略 -->
        <!-- 修改角色查询SQL,正确拼接通配符 -->
        <Property name="RolesSQL">SELECT ROLE_NAME FROM UM_ROLE WHERE ROLE_NAME LIKE '%' || ? || '%'</Property>
        <!-- 同步调整混合角色查询SQL -->
        <Property name="GetHybridRolesSQL">SELECT ROLE_NAME FROM UM_ROLE WHERE ROLE_NAME LIKE '%' || ? || '%'</Property>
    </UserStoreManager>
    
  2. 升级PostgreSQL JDBC驱动
    当前使用的42.2.2版本存在兼容性问题,替换为WSO2 EI 6.4.0兼容的驱动版本(如42.2.19):

    • 下载对应版本的postgresql-xxx.jar
    • 替换容器内<EI_HOME>/repository/components/lib/下的旧驱动文件

三、Docker部署生效步骤

  1. 将修改后的master-datasources.xml和user-mgt.xml挂载到Docker容器的对应配置路径
  2. 替换驱动文件后,重启WSO2 EI容器:
    docker restart <ei-container-name>
    

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:18:07