Glassfish域需'dolmen'域身份验证,夜间自动化测试登录失败求助
排查Jenkins夜间自动化测试dolmen域登录失败问题
先结合你给出的日志信息明确核心问题:
Jenkins夜间自动化测试日志:
(Automated tests that run in the night) [HttpAuthenticationRequestFilter$UPDCredentialsProvider] Domain request authentication with the realm 'dolmen'服务器日志:
23/01/2018 01:28:25.637 [http-thread-pool-8080(15)] WARN java.util.logging.Logger.doLog WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception 23/01/2018 01:28:25.646 [http-thread-pool-8080(29)] ERROR java.util.logging.Logger.doLog jdbcrealm.invaliduserreason
你已经通过asadmin确认'dolmen'域存在,结合日志里的jdbcrealm.invaliduserreason提示,问题大概率出在JDBC Realm的验证环节,下面是几个针对性的排查方向:
1. 先确认测试用凭据的有效性
夜间自动化测试用的账号密码可能和你手动验证的不一致,或是Jenkins存储的凭据有问题:
- 直接用测试脚本里的账号密码手动登录目标系统,确认能正常通过'dolmen'域认证
- 进入Jenkins的凭据管理模块,查看对应测试任务使用的凭据,检查用户名是否拼写正确,密码是否有特殊字符转义错误(比如空格、特殊符号未正确处理)
2. 深入核对JDBC Realm的配置与数据库数据
jdbcrealm.invaliduserreason说明验证失败发生在JDBC Realm层面,重点检查:
- 执行
asadmin get configs.config.server-config.security-service.realms.realm.dolmen.*查看Realm详细配置,确认数据库连接URL、用户名、密码是否正确,加密算法(比如MD5、SHA-256)是否和数据库中用户密码的存储格式匹配 - 登录Realm对应的数据库,检查测试用户记录:
- 密码是否按照Realm配置的算法加密存储(如果是明文存储,确认Realm是否开启了明文验证)
- 用户是否被标记为禁用、过期,或者不在Realm指定的用户表/字段中
- 如果Realm有角色限制,确认用户是否属于要求的角色组
3. 排查系统时间同步问题
夜间时段的时间漂移可能导致认证令牌或会话验证失败:
- 检查Jenkins节点和应用服务器的系统时间,确保时区一致且时间偏差不超过5分钟
- 确认两台机器都开启了NTP时间同步服务,避免夜间自动同步时出现时间跳变
4. 开启详细认证日志获取精准线索
当前日志只有错误摘要,开启详细日志能帮你定位具体失败原因:
- 执行
asadmin set-log-levels com.sun.enterprise.security.auth.login.level=FINE开启认证模块的详细日志 - 重新触发测试任务,查看新生成的日志,里面会包含数据库查询语句、密码匹配过程等细节,能直接指出是用户不存在、密码不匹配还是数据库连接问题
5. 对比手动与自动化测试的请求差异
自动化测试的请求上下文可能和手动操作不同:
- 检查测试脚本中请求的URL是否正确,Realm名称是否和日志中的'dolmen'完全一致(注意大小写敏感)
- 确认测试使用的认证方式(比如HTTP Basic认证、表单提交)是否和目标系统的认证机制匹配,是否遗漏了必要的请求头或参数
6. 排查夜间时段的服务器资源与维护任务
夜间可能有服务器维护任务或资源波动导致认证失败:
- 查看测试时间点(01:28左右)的服务器监控数据,检查CPU、内存、数据库连接池是否有耗尽的情况
- 确认是否有夜间执行的脚本、备份任务或配置变更,是否修改了Realm配置、数据库数据或服务器权限
内容的提问来源于stack exchange,提问作者Vitor
相关产品推荐
相关产品推荐

