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

如何在ORDS Apex类中获取认证头Token值并用于PL/SQL验证

在Apex类中获取认证头并传入PL/SQL验证的方法

1. 在Apex类中获取认证头

如果你的Apex类用于处理外部REST请求,可以通过RestContext对象直接读取请求头。以下是实用示例:

@RestResource(urlMapping='/authValidation/*')
global with sharing class AuthHeaderProcessor {
    @HttpPost
    global static void handleAuthCheck() {
        String authHeaderKey = 'Authorization';
        String authHeaderValue = null;

        // 先校验请求和头是否存在,避免空指针异常
        if (RestContext.request != null && RestContext.request.headers.containsKey(authHeaderKey)) {
            authHeaderValue = RestContext.request.headers.get(authHeaderKey);
        }

        if (authHeaderValue != null) {
            // 调用PL/SQL存储过程做验证
            String plsqlCall = 'BEGIN verify_auth_header(:auth_val); END;';
            Database.executeQuery(plsqlCall, new Map<String, Object>{'auth_val' => authHeaderValue});
        } else {
            // 返回认证缺失的错误响应
            RestContext.response.statusCode = 401;
            RestContext.response.responseBody = Blob.valueOf('认证头不能为空');
        }
    }
}

2. 编写PL/SQL验证逻辑

创建对应的存储过程,接收Apex传递的认证头值并执行业务验证:

CREATE OR REPLACE PROCEDURE verify_auth_header(p_auth_val IN VARCHAR2) AS
BEGIN
    -- 示例:校验Bearer令牌格式
    IF NOT REGEXP_LIKE(p_auth_val, '^Bearer [A-Za-z0-9\-_.]+$') THEN
        RAISE_APPLICATION_ERROR(-20001, '认证格式不符合要求');
    END IF;

    -- 可扩展逻辑:比如解码JWT、查询数据库验证令牌有效性、校验用户权限等
    -- 示例:SELECT COUNT(*) INTO v_count FROM valid_tokens WHERE token = SUBSTR(p_auth_val, 8);
    -- IF v_count = 0 THEN RAISE_APPLICATION_ERROR(-20002, '令牌无效'); END IF;
END;
/

额外说明

  • 如果你的Apex类不是REST服务上下文(比如触发器、批处理任务),通常不会直接接收外部请求头。这种场景下若需操作头,一般是主动发起HTTP请求时通过HttpRequest.getHeader()读取自己设置的头。
  • 务必处理RestContext.request为null的边界情况,避免运行时异常。
  • PL/SQL验证逻辑可根据业务需求自由扩展,比如对接身份认证服务、校验用户权限等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:42:37