API调用常见问题
创作时间:
作者:
@小白创作中心
API调用常见问题
引用
1
来源
1.
https://open.hand-china.com/hzero-docs/v0.11/zh/docs/faq/api/
PERMISSION_MISMATCH
- 描述:调用接口返回 403,编码为
PERMISSION_MISMATCH
,没有该权限。 - 原因:
iam_permission
或 缓存中没有对应的权限 - 解决步骤:
1.首先检查接口调用是否正确,与请求的API是否匹配
2.检查Redis (db4 > gateway > permissions) 中是否有这个权限
3.再检查 iam_permission 中是否有这个权限(注意有层级之分)
4.如果 iam_permission 中没有权限,调用 [hzero-iam > Permission Refresh] 下的 [/v1/permission/fresh/{serviceName}] 接口手动刷新服务权限。
5.如果 iam_permission 中有,而 Redis 中没有的话,调用 [hzero-iam > Permission Refresh] 下的 [/v1/permission/cache/{serviceName}] 接口手动刷新服务权限缓存。
6.上述方式都不行,如果是依赖的 hzero 服务,检查是否是版本用错了,有些服务区分 saas 版本和op版本,op 版本是不包含平台级接口的。
7.如果是自己开发的服务,检查 Controller 接口上是否有 @Permission 和 @ApiOperation 注解
8.检查网关服务是否配置了 redis.database=4,权限缓存到 db4 下。
刷新权限 403
- 描述:调用刷新权限的接口返回 403,编码为
PERMISSION_MISMATCH
,没有该权限。 - 原因:检查
iam_permission
表是否没有任何数据。正常情况下 IAM 服务启动时会自动刷新自身的权限,只要用户登录后,就可以调用刷新权限的接口。没有刷新权限是由于 IAM 服务没监听到服务注册,因而没有刷新服务的权限。
PERMISSION_NOT_PASS
- 描述:调用接口返回 403,编码为
PERMISSION_NOT_PASS - 原因:当前用户没有接口权限,可能是权限集中没有维护该权限,或者用户的角色没有分配到相应的权限集
- 解决:首先在
菜单配置>权限集>权限
下,检查是否有该权限(或LOV),其次在
角色管理>分配权限
里检查当前角色是否已分配了该权限集。注意以上操作本身是需要管理员权限的。
服务API调用 405
- 描述:服务部署正常,API调用返回
no content
,控制台显示 405 错误 - 解决:405 是服务不可访问,有可能是调用接口方法(method)不正确、服务器本身设置不可访问某些方法,或者网关地址、服务地址不正确。 可以发现这里是API调用地址配置的网关域名没有端口号导致的。
服务 Feign 调用没有 Jwt
- 描述:服务提供者和调用者服务都正常,单独调用服务接口也正常,但通过
Feign
调用返回401,报
No Jwt token in request
错误。 - 解决:检查 pom 中是否引入了
choerodon-starter-feign-replay
<dependency>
<groupId>io.choerodon</groupId>
<artifactId>choerodon-starter-feign-replay</artifactId>
</dependency>
- 原因分析:此 jar 包中的
FeignRequestInterceptor
会自动拦截feign请求,为 RequestTemplate 加上 oauth token 请求头,被调用方即可解析出token。 - 扩展:在服务启动类上,一般都会加上
@EnableChoerodonResourceServer
注解,该注解的主要功能是开启一个过滤器
JwtTokenFilter
,解析 Jwt_Token,得到用户信息,因此可以在程序中通过
DetailsHelper.getUserDetails()
得到当前访问的用户信息。同时,该过滤器默认对
/v1/*
接口生效,如果其它前缀的路由也需要用户信息,需手动配置。
某个权限401
- 描述:同一个服务只有一个接口始终报401,无法获取Jwt,其它接口都可正常访问
- 解决:经调试 gateway-helper,发现该 Permission 为 public 接口,public 接口自然不会获取 AccessToken。但是数据库是正常的,原因则是缓存中的权限是public的,可能是数据库手动修改的,清理下缓存即可。切记不要手动修改数据库权限,权限更新后会自动刷新缓存,否则需要自行调接口刷新缓存。
路由存在,无法访问
- 描述:路由存在,但无法访问,调用API返回
PERMISSION_SERVICE_ROUTE - 原因分析:路由是手动在数据库维护的,或者
gateway
、
gateway-helper
没有启用配置中心,从而无法获取服务路由。正常情况下,服务启动后,
hzero-config
中会自动创建服务路由,并通知
hzero-gateway
、
hzero-gateway-helper
拉取最新的服务路由列表。
解决:
- 首先检查自己部署的服务是否可访问,先检查注册中心上服务是否注册成功,其次检查IP是否可访问。
- 其次,保证 gateway、gateway-helper 启用了配置中心,具体可参考服务配置中
hzero-gateway-helper
一节。 - 最后,可手动创建路由或者通知刷新路由
- 创建路由
如果
hsgp_service_route
中不存在相关路由,可调用
hzero-config
创建路由接口手动创建路由,也可在
服务配置>服务路由
页面维护。请不要直接在数据库添加,否则还需要手动调用刷新路由接口通知
hzero-gateway
、
hzero-gateway-helper
拉取路由。 - 刷新路由
如果路由已存在,但网关返回路由找不到,此时需手动刷新服务路由。可在
服务配置>服务路由#刷新路由
处刷新,也可调用
hzero-config
刷新路由接口刷新。
热门推荐
从恒瑞新药申报看进口药审批:每一步都是为了患者安全
爱创科技打造进口药品全程追溯体系,助力药企合规降本增效
集泰化工创新技术引领两轮电动车电池安全升级
黑龙江省水利学校举办“校园演说家”大赛,杨嘉琪获一等奖
感恩节特辑:感恩教育助力青少年心理健康
感恩节特辑:东平县接山镇中学的感恩教育实践
美国哈佛教授:转移性结直肠癌患者,目前主要可能受益于这三类靶向治疗
磨玻璃结节的早期发现与精准诊疗
广州御和堂洪国军:科学预防肺磨玻璃结节八大要点
异地工作社保怎么办
从选材到出锅:用生姜烹饪红烧鱼的完整指南
生姜养生有讲究:3大功效与安全食用指南
从解表散寒到生发功效:生姜的中医传承与现代创新
感恩教育主题班会,如何成功组织?
这么吃能减肥!官方发文,手把手教你→
感恩教育助力高中生心理健康
感恩节特辑:感恩教育提升班级管理
支付宝交医保缴费教程2025年(支付宝医保缴费最新流程详解)
属马的你,今年最火的幸运配饰竟是它?
ILM教你用非暴力沟通化解职场冲突
COPD症状识别:咳嗽、痰多、呼吸困难是关键
慢阻肺早期筛查问卷发布,这些人群需重点关注
希腊六天工作制:经济复苏的新希望还是工人权益的倒退?
希腊工作签证新规出炉,打工族看过来!
从理想到现实:《沧浪之水》展现中国社会转型期知识分子精神变迁
领导餐饮安排背后的消费心理学揭秘
朱总牛总杨总教你读懂领导餐饮安排
餐饮企业文化:揭秘领导背后的管理智慧
春风文艺《怀念一只鸟》获“奇迹童书大赏”,展现自然和谐主题
深耕东北文化六十年,春风文艺推出创新力作《重返白垩纪》