Spring security Zuul调用的基本身份验证服务

Spring security Zuul调用的基本身份验证服务,spring-security,spring-cloud,netflix-zuul,Spring Security,Spring Cloud,Netflix Zuul,我是Zuul作为边缘服务器。因此,所有请求都会通过此边缘服务器。 我有一个微服务a。a的所有web服务都受到基本身份验证的保护。 我们如何通过Zuul代理调用b的服务? 我应该为邮件添加标题吗 理想情况下,请求者将在请求中拥有令牌。 如果要让Zuul添加身份验证令牌,则可以创建ZuulFilter并使用: context.addZuulRequestHeader("Authorization", "base64encodedTokenHere"); 这样做将使开放访问服务-这可能不明智。这是我

我是Zuul作为边缘服务器。因此,所有请求都会通过此边缘服务器。 我有一个微服务a。a的所有web服务都受到基本身份验证的保护。 我们如何通过Zuul代理调用b的服务?
我应该为邮件添加标题吗

理想情况下,请求者将在请求中拥有令牌。
如果要让Zuul添加身份验证令牌,则可以创建ZuulFilter并使用:

context.addZuulRequestHeader("Authorization", "base64encodedTokenHere");

这样做将使开放访问服务-这可能不明智。

这是我的Zuul过滤器:

public class BasicAuthorizationHeaderFilter extends ZuulFilter {


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

@Override
public int filterOrder() {
    return 10;
}

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

@Override
public Object run() {

    RequestContext ctx = RequestContext.getCurrentContext();
    ctx.getRequest().getRequestURL();
    ctx.addZuulRequestHeader("Authorization", "Basic " + Utils.getBase64Credentials("user", "Token"));
    return null;
}

}
您可以这样(通过Zuul)调用您的服务A:

https://login:password@zuulurl.com/serviceA
但首先允许通过Zuul对该特定服务(路由)进行授权头,属性文件中的属性为sensitiveHeaders

zuul.routes.serviceA.sensitiveHeaders=Cookie,Set-Cookie
如果你想传递Cookie头,也可以让它为空


<>这里,关于

更多的信息使用ZUL的敏感标头属性和空白值,

zuul.sensitiveHeaders=
上面的属性可以实现这一点,但是如果您想要对Cookie头使用过滤器 可以将该属性与值一起使用

zuul.sensitiveHeaders=Cookie,Set-Cookie

这种变化有点棘手

@Override
public int filterOrder() {
    return 1; // change the return value to more than 5 the above code will work.
}
尝试使用下面的最终代码:

@Component
public class PreFilter extends ZuulFilter {
    private static final Logger LOG = LoggerFactory.getLogger(PreFilter.class);

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

    @Override
    public int filterOrder() {
        return 10;
    }

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

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        ctx.addZuulRequestHeader("Authorization", request.getHeader("Authorization"));
        return null;
    }
}

请删除答案中不必要的代码并添加简短的解释。
@Component
public class PreFilter extends ZuulFilter {
    private static final Logger LOG = LoggerFactory.getLogger(PreFilter.class);

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

    @Override
    public int filterOrder() {
        return 10;
    }

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

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        ctx.addZuulRequestHeader("Authorization", request.getHeader("Authorization"));
        return null;
    }
}