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

Genexus智能设备网格更新记录测试环境报Unauthorized错误

Genexus 16U11 安卓端改删操作报未授权问题排查

问题基本信息

  • 开发环境:Genexus 16U11,安卓端数据网格基于Work With Smart Device组件搭建
  • 异常表现:
    • 记录插入功能全环境正常,仅测试服务器环境下,确认执行记录删除/更新操作后直接返回*Unauthorized(未授权)*错误,无其他额外提示
    • 本地开发环境、生产服务器环境改删功能完全正常
  • 前期已做排查:
    • 开启client.log调试功能后,日志文件始终为空无输出
    • 通过Android Studio Logcat工具抓取运行日志,核心报错栈如下:
2022-06-24 12:19:46.028 4745-4893/com.artech.rts.fotointerventi W/DefaultRequestDirector: Authentication error: Unable to respond to any of these challenges: {}
2022-06-24 12:19:46.031 4745-4893/com.artech.rts.fotointerventi W/System.err: org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONArray
2022-06-24 12:19:46.032 4745-4893/com.artech.rts.fotointerventi W/System.err:     at org.json.JSON.typeMismatch(JSON.java:111)
2022-06-24 12:19:46.033 4745-4893/com.artech.rts.fotointerventi W/System.err:     at org.json.JSONArray.<init>(JSONArray.java:96)
2022-06-24 12:19:46.033 4745-4893/com.artech.rts.fotointerventi W/System.err:     at org.json.JSONArray.<init>(JSONArray.java:108)
2022-06-24 12:19:46.033 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceErrorParser.parseBody(ServiceErrorParser.java:74)
2022-06-24 12:19:46.033 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceErrorParser.parse(ServiceErrorParser.java:38)
2022-06-24 12:19:46.036 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceHelper.responseToServiceResponse(ServiceHelper.java:484)
2022-06-24 12:19:46.036 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceHelper.doServerRequest(ServiceHelper.java:469)
2022-06-24 12:19:46.036 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceHelper.doServerRequest(ServiceHelper.java:440)
2022-06-24 12:19:46.037 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceHelper.putJson(ServiceHelper.java:432)
2022-06-24 12:19:46.037 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.common.ServiceHelper.updateEntityData(ServiceHelper.java:258)
2022-06-24 12:19:46.037 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.layers.RemoteBusinessComponent.callService(RemoteBusinessComponent.java:194)
2022-06-24 12:19:46.037 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.layers.RemoteBusinessComponent.save(RemoteBusinessComponent.java:76)
2022-06-24 12:19:46.037 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.fragments.LayoutFragmentEditBC$SaveActionTask.saveBCAndMedia(LayoutFragmentEditBC.java:160)
2022-06-24 12:19:46.037 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.fragments.LayoutFragmentEditBC$SaveActionTask.doInBackground(LayoutFragmentEditBC.java:142)
2022-06-24 12:19:46.038 4745-4893/com.artech.rts.fotointerventi W/System.err:     at com.artech.fragments.LayoutFragmentEditBC$SaveActionTask.doInBackground(LayoutFragmentEditBC.java:69)
2022-06-24 12:19:46.038 4745-4893/com.artech.rts.fotointerventi W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
2022-06-24 12:19:46.038 4745-4893/com.artech.rts.fotointerventi W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2022-06-24 12:19:46.038 4745-4893/com.artech.rts.fotointerventi W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
2022-06-24 12:19:46.038 4745-4893/com.artech.rts.fotointerventi W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
2022-06-24 12:19:46.039 4745-4893/com.artech.rts.fotointerventi W/System.err:     at java.lang.Thread.run(Thread.java:764)

故障根因分析

从日志可以直接拆解出两个核心信息,此前认为两台服务器配置一致的判断存在遗漏:

  1. 首行鉴权错误说明改删请求根本没走到Genexus业务逻辑层,在测试服务器的前置接入层就被401拦截了
  2. 后续JSON解析错误是连锁反应:接入层拦截请求后返回的是HTML格式的401错误页(<!DOCTYPE是HTML文档的标准开头标识),但Genexus客户端默认按JSON格式解析接口响应,直接抛出类型转换异常,把真实的拦截原因吞掉,最终只显示笼统的未授权提示。

具体排查点

按优先级从高到低核对:

  • 第一优先级检查测试服务器Web接入层(IIS/Nginx/Apache、反向代理、WAF)的HTTP方法授权规则:Genexus SD应用的插入操作走POST请求,更新走PUT、删除走DELETE。绝大多数同类问题都是测试环境接入层默认只放开了GET/POST方法的鉴权白名单,PUT/DELETE请求被全局拦截规则直接拦截,刚好匹配插入正常、改删报错的表现。生产环境因为历史配置已经放开全方法权限所以运行正常,测试环境部署时漏配了这条规则。
  • 第二优先级核对Genexus BC(Business Component)接口路由的权限配置:改删操作调用的是RemoteBusinessComponent的save/delete接口,和插入接口路由不同,检查测试环境对应路由的身份验证规则是否和生产一致,有没有开启Windows集成鉴权、IP白名单拦截、路径级别的权限控制。
  • 第三优先级检查CSRF防护、跨域规则:部分WAF或Web框架的CSRF防护默认会拦截带自定义鉴权头的PUT/DELETE请求,POST请求因为符合表单提交规则被直接放行,也会出现同类现象。
  • 快速验证方式:在测试服务器接入层抓包,直接查看PUT/DELETE请求返回的完整HTML内容,页面里会明确标注是被哪条拦截规则阻断,不需要逐行对比配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:39:36