我是Zuul作为边缘服务器。所有请求都通过此边缘服务器传递。 我有一个微服务A.A的所有Web服务都受基本身份验证保护。 我们如何通过Zuul代理调用A b的服务? 我应该为邮件添加标题吗?
答案 0 :(得分:8)
这是我的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;
}
}
答案 1 :(得分:6)
理想情况下,请求者会在请求中拥有令牌 如果你想让Zuul添加身份验证令牌,那么你可以创建一个ZuulFilter并使用:
context.addZuulRequestHeader("Authorization", "base64encodedTokenHere");
这样做可以提供对服务的开放访问 - 这可能并不明智。
答案 2 :(得分:1)
@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 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
ctx.addZuulRequestHeader("Authorization", request.getHeader("Authorization"));
LOG.info("Parametres : {}", request.getParameterMap()
.entrySet()
.stream()
.map(e -> e.getKey() + "=" + Stream.of(e.getValue()).collect(Collectors.toList()))
.collect(Collectors.toList()));
LOG.info("Headers : {}", "Authorization" + "=" + request.getHeader("Authorization"));
LOG.info(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));
return null;
}
}
答案 3 :(得分:0)
您可以拨打(通过Zuul)您的服务A:
https://login:password@zuulurl.com/serviceA
但是,对于此特定服务(路线),您的属性文件中的属性 sensitiveHeaders ,则允许 AUTHORIZATION 标头通过Zuul:
zuul.routes.serviceA.sensitiveHeaders=Cookie,Set-Cookie
或者如果你想传递Cookie标题也让它为空。
此处有关于headers through Zuul
的更多信息答案 4 :(得分:0)
将zuul的敏感标头属性与空白值一起使用
zuul.sensitiveHeaders=
上面的属性可以解决问题,但是如果您想为Cookie标头设置过滤器 您可以将该属性与值一起使用
zuul.sensitiveHeaders=Cookie,Set-Cookie
答案 5 :(得分:0)
此更改有点棘手。
public int filterOrder() {
return 1; // change the return value to more than 5 the above code will work.
} ```
```Example code:
@Override
public int filterOrder() {
return 10; // change to more that 5 the above code will work.
}
尝试下面的最终代码
` @零件 公共类PreFilter扩展ZuulFilter { 私有静态最终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;
}
}`