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执行失败。
解决方案
一、修复事务隔离级别问题
- 修改主数据源配置
编辑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>
二、修复角色过滤通配符问题
调整用户存储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>升级PostgreSQL JDBC驱动
当前使用的42.2.2版本存在兼容性问题,替换为WSO2 EI 6.4.0兼容的驱动版本(如42.2.19):- 下载对应版本的
postgresql-xxx.jar - 替换容器内
<EI_HOME>/repository/components/lib/下的旧驱动文件
- 下载对应版本的
三、Docker部署生效步骤
- 将修改后的
master-datasources.xml和user-mgt.xml挂载到Docker容器的对应配置路径 - 替换驱动文件后,重启WSO2 EI容器:
docker restart <ei-container-name>
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

