Spring security Zuul调用的基本身份验证服务
我是Zuul作为边缘服务器。因此,所有请求都会通过此边缘服务器。 我有一个微服务a。a的所有web服务都受到基本身份验证的保护。 我们如何通过Zuul代理调用b的服务?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添加身份验证令牌,则可以创建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;
}
}