WSO2 API Manager自定义限流策略:IP白名单访问特定REST API资源
WSO2 APIM 3.2.0 实现指定IP白名单的自定义限流策略
下面是具体的实现步骤,帮你拦截非白名单IP对API特定资源的请求:
1. 创建自定义IP白名单限流策略
- 登录APIM管理门户,导航到Rate Limiting Policies → Custom Policies,点击Add Policy。
- 填写基础信息:
- Policy Name:取个好识别的名字,比如
IP_Whitelist_Restriction - Policy Type:选
Custom - Description:仅允许指定IP访问目标API资源
- Policy Name:取个好识别的名字,比如
- 在Policy Definition框里,粘贴以下Synapse序列代码,替换
ALLOWED_IPS的值为你的白名单IP列表:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="IP_Whitelist_Seq"> <!-- 定义允许访问的IP列表,用逗号分隔 --> <property name="ALLOWED_IPS" value="192.168.1.10,10.20.30.40" scope="default" type="STRING"/> <!-- 获取请求的源IP --> <property name="SOURCE_IP" expression="get-property('axis2','REMOTE_ADDR')" scope="default" type="STRING"/> <!-- JS脚本判断IP是否在白名单内 --> <script language="js"> const allowedList = mc.getProperty('ALLOWED_IPS').split(',').map(ip => ip.trim()); const clientIp = mc.getProperty('SOURCE_IP').trim(); if (!allowedList.includes(clientIp)) { // 返回403禁止访问 mc.setProperty('HTTP_SC', '403'); mc.setProperty('MESSAGE_TYPE', 'application/json'); mc.setPayloadJSON({ "error": "Forbidden", "message": "Your IP address is not authorized to access this resource" }); throw new Error('Unauthorized IP address'); } </script> </sequence>
2. 密钥模板(Key Template)填写内容
在创建策略的Key Template输入框中,直接填写唯一标识该策略的字符串即可,推荐和策略名称对应,比如:
IP_WHITELIST_RESTRICTION
这个值是策略的内部标识,后续绑定到API资源时会用到,确保唯一就行。
3. 绑定策略到API特定资源
- 找到你要保护的API,进入Manage → Policies → Rate Limiting页面。
- 滚动到Resource Level Policies区域,找到目标资源(比如
/products的GET请求)。 - 点击该资源对应的Add Policy按钮,选择刚才创建的
IP_Whitelist_Restriction策略,保存配置。 - 重新发布API,让策略生效。
4. 验证策略
- 用白名单内的IP调用目标资源:正常返回业务响应。
- 用白名单外的IP调用:会收到403错误响应,提示IP未授权。
内容的提问来源于stack exchange,提问作者Ali farahzadi
相关产品推荐
相关产品推荐

