WSO2 APIM 4.1.0响应中介器中如何获取请求信息?
在响应流中使用请求的Query参数、Headers等信息
要在WSO2的响应流(比如outSequence)中访问请求阶段的Query参数、Headers这类数据,核心是先把请求数据存储到消息上下文(Message Context)的属性中,因为默认情况下,请求阶段的上下文数据不会自动带到响应阶段。
具体实现方式:
在inSequence中存储请求数据
在请求处理的inSequence里,用Property Mediator把需要的Query参数、Headers保存为上下文属性:<inSequence> <!-- 存储URL查询参数firstname到上下文属性 --> <property name="REQ_FIRSTNAME" expression="$url:firstname" scope="default" type="STRING"/> <!-- 存储请求Header(比如Authorization)到上下文属性 --> <property name="REQ_AUTH_HEADER" expression="$trp:Authorization" scope="default" type="STRING"/> <!-- 继续其他请求处理逻辑 --> <send/> </inSequence>scope="default":确保属性在整个消息生命周期(包括outSequence)中可用$url:firstname:用于提取URL查询参数;$trp:HeaderName用于提取请求Header
在outSequence中调用存储的属性
在响应流的outSequence里,直接引用之前存储的上下文属性即可:<outSequence> <!-- 输出存储的firstname参数 --> <log level="custom"> <property name="firstname" expression="$ctx:REQ_FIRSTNAME"/> </log> <!-- 输出存储的请求Header --> <log level="custom"> <property name="auth_header" expression="$ctx:REQ_AUTH_HEADER"/> </log> <send/> </outSequence>
关键说明:
直接在outSequence中使用$url:firstname无法获取请求参数,因为进入outSequence时,当前处理的是响应消息,$url表达式默认指向响应的URL而非请求URL,必须提前在inSequence中把请求数据持久化到上下文属性里。
内容的提问来源于stack exchange,提问作者m.feyzollahi
相关产品推荐
相关产品推荐

