|
|
|
@ -8,7 +8,6 @@ import com.gitee.sop.gatewaycommon.zuul.ZuulContext; |
|
|
|
|
import com.gitee.sop.gatewaycommon.zuul.loadbalancer.BaseServerChooser; |
|
|
|
|
import com.netflix.loadbalancer.Server; |
|
|
|
|
import com.netflix.niws.loadbalancer.DiscoveryEnabledServer; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
|
import java.util.Map; |
|
|
|
@ -23,6 +22,7 @@ public class EnvironmentServerChooser extends BaseServerChooser { |
|
|
|
|
private static final String MEDATA_KEY_ENV = "env"; |
|
|
|
|
private static final String ENV_PRE_VALUE = "pre"; |
|
|
|
|
private static final String ENV_GRAY_VALUE = "gray"; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 预发布机器域名 |
|
|
|
|
*/ |
|
|
|
@ -46,39 +46,6 @@ public class EnvironmentServerChooser extends BaseServerChooser { |
|
|
|
|
return metadata.get(MEDATA_KEY_ENV); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected boolean match(Server server) { |
|
|
|
|
// eureka存储的metadata
|
|
|
|
|
Map<String, String> metadata = ((DiscoveryEnabledServer) server).getInstanceInfo().getMetadata(); |
|
|
|
|
String env = metadata.get(MEDATA_KEY_ENV); |
|
|
|
|
return StringUtils.isNotBlank(env); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 这里判断客户端能否访问,可以根据ip地址,域名,header内容来决定是否可以访问预发布环境 |
|
|
|
|
* |
|
|
|
|
* @param server 服务器实例 |
|
|
|
|
* @param request request |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
protected boolean canVisit(Server server, HttpServletRequest request) { |
|
|
|
|
// eureka存储的metadata
|
|
|
|
|
Map<String, String> metadata = ((DiscoveryEnabledServer) server).getInstanceInfo().getMetadata(); |
|
|
|
|
String env = metadata.get(MEDATA_KEY_ENV); |
|
|
|
|
boolean canVisit; |
|
|
|
|
switch (env) { |
|
|
|
|
case ENV_PRE_VALUE: |
|
|
|
|
canVisit = canVisitPre(server, request); |
|
|
|
|
break; |
|
|
|
|
case ENV_GRAY_VALUE: |
|
|
|
|
canVisit = canVisitGray(server, request); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
canVisit = false; |
|
|
|
|
} |
|
|
|
|
return canVisit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 通过判断hostname来确定是否是预发布请求,可修改此方法实现自己想要的 |
|
|
|
@ -121,7 +88,7 @@ public class EnvironmentServerChooser extends BaseServerChooser { |
|
|
|
|
* |
|
|
|
|
* @param param 接口参数 |
|
|
|
|
* @param userKeyManager userKey管理 |
|
|
|
|
* @param server 服务器实例 |
|
|
|
|
* @param server 服务器实例 |
|
|
|
|
* @param request request |
|
|
|
|
* @return true:是 |
|
|
|
|
*/ |
|
|
|
|