cookie-transformer

<p class="shortdesc">用户需要根据Cookie或者Header中的值做灰度策略,但是Cookie或Header中的值是加密的数据,真实的值是保存在Redis中。通过此插件可以将Redis中的值读取出来,并且写入到header中,提供给灰度代理判断使用。</p> <section class="section" id="cookie-transformer__section_cdp_lwc_fsb"><h2 class="doc-tairway">配置说明</h2> <div class="p"> <table class="table" id="cookie-transformer__table_u3s_mwc_fsb"><caption></caption><colgroup><col style="width:23.861171366594363%"><col style="width:21.69197396963124%"><col style="width:54.4468546637744%"></colgroup><thead class="thead"> <tr class="row"> <th class="entry align-left" id="cookie-transformer__table_u3s_mwc_fsb__entry__1">参数名</th> <th class="entry align-left" id="cookie-transformer__table_u3s_mwc_fsb__entry__2">类型</th> <th class="entry align-left" id="cookie-transformer__table_u3s_mwc_fsb__entry__3">参数说明</th> </tr> </thead><tbody class="tbody"> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">rule</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">值从哪里获取。只可以是cookie或者header</td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">rule_key</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">即读取的Cookie Key或者header Key的列表,按第一个读取到的数据为准。<strong class="ph b">2.0.3版本是string类型,只支持一个。</strong></td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">rule_cache_timeout</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">number</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">本地缓存时间(单位为秒)。默认为0即不缓存到本地。</td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">whitelist</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">即哪些URI需要执行后续的逻辑,支持正则表达式匹配。<strong class="ph b">2.0.4版本开始支持</strong></td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">blacklist</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">即哪些URI不需要执行后续的逻辑,支持正则表达式匹配。<strong class="ph b">2.0.4版本开始支持</strong></td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_method</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">默认为hget,即从hash中读取,也可以是get,即直接读取</td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_key_pre</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">key值的前缀,即从redis中读取数据的Key为redis_key_pre+rule_key的值+redis_key_post</td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_key_post</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">key值的后缀,即从redis中读取数据的Key为redis_key_pre+rule_key的值+redis_key_post</td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_hash_fields</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">当redis_method=hget时可用,即从哪几个字段中读取数据。如果存在多个字段则按{field1_value}:{field2_value}这个格式写入header</td> </tr> <tr class="row"> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_cluster</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td> <td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">redis集群节点配置</td> </tr> </tbody></table> </div> <div class="p"><strong class="ph b">缓存大小说明</strong><ul class="ul" id="cookie-transformer__ul_bzh_pwc_fsb"> <li class="li">2.0.6-1 之前版本默认最大支持到8W key,2.0.6-1版本修改了默认内存配置,默认最大可支持100W Key。</li> <li class="li">如果需要修改支持Key大小可以添加启动环境变量 (如下是2.0.6-1 默认值,请在部署时预留相应内存)。<p class="p">KONG_CACHE_SIZE_ROUTE_RULE=300m</p><p class="p">KONG_CACHE_SIZE_REDIS_STATUS=300m</p></li> </ul></div> <p class="p"><strong class="ph b">Key/Value测试数据示例</strong></p> <p class="p">KEY = mo:login:session:039afee1-0bca-43b7-8c44-94631026f5d9:personDetail</p> <p class="p">VALUE = 039afee1-0bca-43b7-8c44-94631026f5d9</p> </section> <section class="section" id="cookie-transformer__section_onb_1xc_fsb"><h2 class="doc-tairway">示例</h2> <p class="p">按如下配置,则具体执行逻辑为:</p> <ol class="ol" id="cookie-transformer__ol_czg_bxc_fsb"> <li class="li">从cookie中读取pamo_session的值。</li> <li class="li">检查缓存中是否已缓存值,存在则设置header,pamo_session_gray={具体值}。</li> <li class="li">生成redis_key,redis_key_pre+{具体值}+redis_key_post,即“mo:login:session:test:personDetail”。</li> <li class="li">从redis中获取值,并写入到缓存中。</li> <li class="li">设置header,pamo_session_gray={具体值}。</li> </ol> <p class="p">后续可以在代理服务模块设置根据header做路由规则匹配。pamo_session_gray={具体值}</p> <pre class="pre codeblock" id="cookie-transformer__codeblock_tmv_dxc_fsb"><code>{ "redis_method": "hget", "redis_key_pre": "pre:", "redis_key_post": ":post", "rule_cache_timeout": 30, "redis_hash_fields": [ "um" ], "rule": "cookie", "rule_key": [ "sessionkey" ], "whitelist": [ "/login","/user_info" ], "blacklist": [ "/loginV1/.+","/user_infov1/.+" ], "redis_cluster": [ { "redis_port": 16001, "redis_password": "******", "redis_host": "1.1.1.1", "redis_timeout": 2000, "redis_database": 0 }, { "redis_port": 16002, "redis_password": "******", "redis_host": "1.1.1.1", "redis_timeout": 2000, "redis_database": 0 } ] }</code></pre> </section> <section class="section" id="cookie-transformer__section_jck_2xc_fsb"><h2 class="doc-tairway">使用小贴士</h2> <p class="p">默认插件是不开启本地缓存的,因为本地缓存会占用一定内存量。(默认只是开放了20m)</p> <p class="p">如果需要使用缓存,并且缓存量比较大,可以通过环境变量KONG_CACHE_ROUTE_RULE=100m来增大缓存。</p> </section>
以上内容是否解决了您的问题?
请补全提交信息!
联系我们

电话咨询

400-151-8800

邮件咨询

fincloud@ocft.com

在线客服

工单支持

解决云产品相关技术问题