首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-Cloud忽略/包含服务

Spring-Cloud忽略/包含服务
EN

Stack Overflow用户
提问于 2015-11-19 06:54:58
回答 3查看 875关注 0票数 1

在zuul.ignoredServices中有可能有负面的模式吗?我想要负载平衡那些只有名称/virtualHostName为"hrerp*“的服务。

我可以在zuul.routes中显式地定义这些内容。还有其他的可能性吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-20 18:46:30

不,目前还不支持负面模式。拉请求欢迎。

票数 0
EN

Stack Overflow用户

发布于 2015-11-26 11:37:27

作为替代:

  • 具有重写的ProxyRouteLocator 的扩展locateRoutes() (CustomProxyRouteLocator)
    • locateRoutes将考虑将ZuulProperties.ignoredServices作为要包含的内容。

  • 已声明的CustomProxyRouteLocator bean与@Primary
  • 使用PreDecorationFilter CustomProxyRouteLocator@Primary启动
票数 0
EN

Stack Overflow用户

发布于 2018-10-02 12:02:02

尝试这样的方法,它可以让您完全控制阻塞请求的阻塞和日志记录:

在属性中设置如下内容:

代码语言:javascript
复制
zuul:
   blockedServices: 'admin, forbidden'

然后创建如下过滤器类:

代码语言:javascript
复制
@Component
@Slf4j
public class BlockingFilter extends ZuulFilter {

    @Value("#{'${zuul.blockedServices}'.replace(' ', '').split(',')}")
    private List<String> blockedServices;

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return FilterConstants.PRE_DECORATION_FILTER_ORDER;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        if (isBlockedLocation()) {
            blockCurrentRequest();
        }
        return null;
    }

    private boolean isBlockedLocation() {
        String requestUrl = RequestContext.getCurrentContext().getRequest().getRequestURL().toString();

        Set<String> violations = blockedServices.stream()
            .filter(s-> requestUrl.matches(".*" +s +".*"))
            .collect(Collectors.toSet());

        if (violations.size() > 0) {
            log.warn("Blocked illegal request {} which violated rules {}",
                     requestUrl,
                     violations.stream().collect(Collectors.joining(" : ")));
            return true;
        }
        return false;
    }

    /**
     * If they attempt to get to an internal service report back not found
     */
    private void blockCurrentRequest() {
        RequestContext ctx = RequestContext.getCurrentContext();

        //Set your custom error code
        ctx.setResponseStatusCode(NOT_FOUND.value());

        //Spring tends to use json for not found.  This just sets a message.
        ctx.setResponseBody("Page not found");

        //Blocks this request from continued processing.
        ctx.setSendZuulResponse(false);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33797121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档