OU名称含西里尔字符时如何配置TeamCity LDAP同步
解决方案
问题根因
你遇到的乱码和NO_OBJECT报错是因为Java默认以ISO-8859-1编码读取.properties配置文件,西里尔字符不在该编码覆盖范围内,直接写入UTF-8格式的西里尔字符会被错误解析,就会出现你报错日志里的乱码搜索基路径。TeamCity界面编辑的配置存储在数据库中,使用UTF-8编码,所以显示正常。
修复步骤
1. 转义ldap-config.properties中的非ASCII字符
JDK自带的native2ascii工具可以将UTF-8字符转换为Java properties支持的Unicode转义序列:
- 准备一个UTF-8编码的临时配置文件,写入你原有的配置内容
- 执行转换命令:
native2ascii -encoding UTF-8 原配置文件路径 ldap-config.properties
转换后你的teamcity.users.base配置会变成类似如下格式,即可被正确识别:teamcity.users.base=OU=\u0421\u0432\u043e\u0438 \u041b\u044e\u0434\u0438,OU=\u041e\u0444\u0438\u0441
2. 修正ldap-mapping.xml编码
确保xml文件满足两个要求:
- 文件头部明确指定编码:
<?xml version="1.0" encoding="UTF-8"?> - 文件实际保存格式为UTF-8,不要用ANSI等其他编码保存
可选方案:全局设置JVM编码(适用于TeamCity 2020及以上版本)
如果不想每次修改properties都转义,可以修改TeamCity服务端启动参数,添加两个JVM参数:-Dfile.encoding=UTF-8-Dsun.jnu.encoding=UTF-8
重启TeamCity服务后,直接写入UTF-8格式的西里尔字符到ldap-config.properties即可正常读取。
验证
配置修改完成后重启TeamCity服务,进入LDAP同步页面查看搜索基路径是否显示为正常的西里尔字符,无乱码后再执行同步测试即可。
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

