美文网首页
SAP的CORS启用

SAP的CORS启用

作者: Flex_Frank | 来源:发表于2019-02-26 16:16 被阅读0次

    SAP的CORS启用

    [TOC]

    参考

    参考Blog:How to Enable CORS on SAP NetWeaver Platform - Dong Pan && comment by Achim Braemer(除了blog本身,还可以关注下Achim Braemer的评论建议)

    参考文档:SAP Help Portal : Editing Whitelists and No-Log Lists (CORS)

    参考文档:在低于 7.52 版的 SAP NetWeaver 上启用 CORS

    在高版本【7.52以及更高版本】

    相关TCODE:RZ11、UCONCOCKPIT、SMICM

    配置

    1. 配置允许CORS参数

    如果这个参数没有设置,那么所有的跨域请求都将被系统直接过滤,无法捕获
    RZ11 修改参数 icf/cors_enabled 值为1

    RZ11的icf/cors_enabled参数

    注意:通过动态方式修改的参数值会在服务器重启之后重置

    2. 开启CORS

    开启白名单场景

    进入 UCONCOCKPIT,选择 HTTP白名单场景 (Http White-List Scenario)

    UCONCOCKPIT

    首次开启会激活该场景

    HTTP白名单激活对话框

    如果要撤销,通过左上角的 「HTTP白名单」 - 「还原旧配置」 ,然后会删除激活配置

    开启CORS的 「 活动检查 」 模式

    然后开启 「 活动检查 」

    更改模式
    规则配置

    之后可以双击CORS行进入配置白名单规则
    但是为了方便,可以先产生一个跨域请求,系统就会捕获这个请求,针对这个请求,可以自动创建匹配白名单规则

    白名单规则

    选择未覆盖的规则,然后点击 「至白名单」
    或者直接在右边「白名单」区域新建规则

    前端调用CORS代码

    用jquery调用会很简单

    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = () => {
        console.log("xhr.readyState : " + xhr.readyState);
        if (xhr.readyState == 4) {
            console.log("xhr.status : " + xhr.status);
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
                console.log("xhr.responseText : " + xhr.responseText)
                alert("收到消息:" + xhr.responseText);
            }
            else {
                return "Req is unsuccessful : " + xhr.status;
            }
        }
    }
    xhr.open("POST", "$$请求地址$$");
    xhr.setRequestHeader("Authorization","$$Basic basic基础验证串$$")
    
    xhr.send();
    

    其他辅助补充

    查看连接请求

    SMICM

    SMICM SMICM-现实连接

    一次ajax请求,产生两次请求的原因

    允许跨域资源共享(CORS)携带 Cookie,该文章介绍了CORS请求携带cookie信息的设置方式,同时也阐述了为什么有的CORS请求会产生两次请求。
    在此之前需要了解什么是 简单跨域请求 ,需求满足以下条件:

    1. Method只允许:GET/HEAD/POST
    2. Headers只允许出现 :
      • Content-Type
      • Accept
      • Accept-Language
      • Content-Language
      • Last-Event-ID
    3. Content-Type只允许 :
      • application/x-www-form-urlencoded
      • multipart/form-data
      • text/plain

    不满足上述条件的即 复杂跨域请求 ,会在正式请求前发出一个Method为OPTIONS的 预请求(preflight request)
    用参考文章中的内容表示这个请求:

    preflight request

    在低于 7.52 版的 SAP NetWeaver 上启用 CORS

    参考文档:在低于 7.52 版的 SAP NetWeaver 上启用 CORS
    以下内容系拷贝

    先决条件

    必须更新到 SAP 内核 7.49 PL 315 或更高版本。

    背景信息

    注意
    如果 SAP BW 架构是在 SAP Web Dispatcher 背后运行,则应将这些更改应用到 SAP Web Dispatcher 服务器,而不是 ABAP。

    过程

    1. 在 ABAP 服务器上创建新文件。

    此文件将包含 CORS 重写规则。例如,/usr/sap/<SID>/SYS/profile/<cors_rewrite>

    2. 调整 ICM 参数来指向在步骤 1 中创建的文件。

    可以在 ABAP 服务器的 SAP 配置文件参数设置中找到此参数。
    例如,

    icm/HTTP/mod_0 = PREFIX=/,FILE=<Path_To_CORS_Rewrite_File>
    

    注意
    使用创建的 CORS 重写文件的路径替换 <Path_To_CORS_Rewrite_File>。

    3. 在重写文件中添加以下内容:

    if %{HEADER:isSACOriginAllowed} = true
           setHeader isSACOriginAllowed false
    
    if %{HEADER:ORIGIN} regimatch ^(https:\/\/)?<HOSTNAME> [AND]
    if %{PATH} regimatch (\/sap(\(.*\))*\/bw\/ina\/*) 
      setHeader isSACOriginAllowed true
    
    if %{HEADER:isSACOriginAllowed} = true [AND]
    if %{REQUEST_METHOD} regimatch (GET|POST)
    begin
      setResponseHeader Access-Control-Allow-Origin %{HEADER:ORIGIN}
      setResponseHeader Access-Control-Expose-Headers x-csrf-token,sap-rewriteurl,sap-url-session-id,sap-perf-fesrec,sap-system
      setResponseHeader Access-Control-Allow-Credentials true
      setResponseHeader Vary origin
    end
    
    if %{HEADER:isSACOriginAllowed} = true [AND]
    if %{REQUEST_METHOD} stricmp OPTIONS
    begin
      regRewriteUrl ^/(.*) /sap/public/ping
      setResponseHeader Access-Control-Allow-Origin %{HEADER:ORIGIN}
      setResponseHeader Access-Control-Allow-Methods GET,POST
      setResponseHeader Access-Control-Allow-Headers x-csrf-token,x-sap-cid,authorization,mysapsso2,x-request-with,sap-rewriteurl,sap-url-session-id,content-type,accept-language
      setResponseHeader Access-Control-Max-Age 600
      setResponseHeader Access-Control-Allow-Credentials true
      setResponseHeader Vary origin
      removeResponseHeader Set-Cookie
      removeResponseHeader Expires
    end
    

    注意
    使用 SAP Analytics Cloud 主机替换 <HOSTNAME>。例如,mytenant.us1.sapanalytics.com

    注意
    可以将多个主机添加到重写文件。有关详细信息,请参阅如何在 SAP NetWeaver 平台上启用 CORS

    4. 重启 ABAP 服务器。

    相关文章

      网友评论

          本文标题:SAP的CORS启用

          本文链接:https://www.haomeiwen.com/subject/sfbwyqtx.html