Apex 22.1:如何为REST数据源传递JWT以实现LOV功能
解决APEX REST数据源传递动态JWT令牌的问题
可行解决方案
方法1:使用REST数据源的Pre-Request Process
这是最直接可靠的方式,通过在请求执行前运行PL/SQL代码动态设置Authorization头:
- 打开目标REST数据源的编辑页面
- 切换到Processing标签页,找到Pre-Request Process区域
- 点击添加,创建一个PL/SQL进程,输入以下代码:
apex_web_service.set_request_header( p_name => 'Authorization', p_value => 'Bearer ' || :GLOB_TOKEN );
- 保存设置后,REST数据源每次发起请求时,会自动解析应用项
:GLOB_TOKEN的值,生成正确的Authorization头。
方法2:使用动态PL/SQL类型的Web Credential
如果希望通过Web Credential统一管理认证信息,可以创建动态Credential:
- 进入Shared Components > Web Credentials,点击创建
- 选择PL/SQL Function类型,输入Credential名称(如
JWT_DYNAMIC_AUTH) - 在函数体中输入:
return 'Bearer ' || apex_application.g_flow_globals.g_item_values('GLOB_TOKEN');
- 回到REST数据源的编辑页面,切换到Authentication标签页
- 选择刚才创建的Web Credential,认证类型选HTTP Header,并设置头名称为
Authorization - 保存后,每次请求会调用该函数获取动态JWT令牌。
Static标志的作用
在REST数据源的参数(包括请求头参数)配置中:
- 开启Static标志:APEX会将参数值视为固定字符串,不会解析其中的绑定变量(如
:GLOB_TOKEN),直接原样传递给外部服务。 - 关闭Static标志:APEX会尝试解析值中的绑定变量,但这个解析逻辑仅适用于部分场景(如URL路径参数、查询参数),对于请求头参数,直接使用绑定变量可能无法触发解析,这就是你之前尝试失败的原因。
内容的提问来源于stack exchange,提问作者bjan
相关产品推荐
相关产品推荐

