在SAP Gateway服务(DPC_EXT类)中读取自定义Cookie遇阻
我之前也碰到过一模一样的情况!SAP Gateway默认会把标准会话Cookie(比如SAP_SESSIONID_*这类)自行处理,自定义Cookie默认是不会透传到DPC_EXT层的,得两步走才能搞定:
1. 配置网关服务允许传递自定义Cookie
先进入事务码/IWFND/MAINT_SERVICE,找到你的Gateway服务,点击编辑,切换到「服务数据」标签页,往下翻找到「处理设置」区域,把「Cookie处理」的选项改成传递所有Cookie(对应参数值是3,默认是1仅处理会话Cookie)。保存配置后,记得重启服务或者刷新缓存,这个配置才会生效。
2. 用正确的代码获取Cookie
你之前用get_request_header()拿不到Cookie,是因为网关默认把Cookie头从请求头里过滤了,得直接通过HTTP请求对象来获取:
METHOD zxx_get_entity. DATA(lo_http_request) = cl_web_http_runtime=>if_web_http_runtime~get_http_request( ). DATA(lt_cookies) TYPE http_cookies. DATA(lv_custom_cookie) TYPE string. " 获取所有Cookie集合 lt_cookies = lo_http_request->get_cookies( ). " 循环匹配你的自定义Cookie名称 LOOP AT lt_cookies INTO DATA(ls_cookie) WHERE name = 'YOUR_CUSTOM_COOKIE_NAME'. lv_custom_cookie = ls_cookie-value. EXIT. ENDLOOP. " 后续就可以使用获取到的自定义Cookie做业务逻辑了 ENDMETHOD.
另外还要注意几个容易踩的坑:
- 自定义Cookie的名称别用
SAP_开头,这类会被网关判定为系统Cookie直接拦截,不会传递到后端 - 如果是前端跨域调用服务,一定要在请求里配置
withCredentials: true(比如Axios里设置{ withCredentials: true }),不然浏览器根本不会发送自定义Cookie - 检查ICM配置,确保
icm/HTTP/allow_cookies参数设为ALL,避免ICM层提前把Cookie拦下来
内容的提问来源于stack exchange,提问作者iPirat
相关产品推荐
相关产品推荐

