ZUUL 向下游应用发送基本认证
ZUUL send basic authentication to downstream application
我有一个 spring 启动微服务,它需要基本的身份验证数据,即固定 userid/password(如 admin/password)。我正在使用 Spring 云 netflix 生态系统来编排微服务。 Zuul 是我的 API 网关。
我的问题是如何从 Zuul 向我的应用程序发送基本身份验证详细信息,以便在通过 Zuul 访问时它不会要求 userid/password。
您可以添加自定义过滤器并将授权 header 添加到请求中。
授权 header 只是 base64 编码的 "username:password" 字符串。
public class AuthenticatedFilter 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();
String auth = "username" + ":" + "password";
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1")));
String authValue = "Basic " + new String(encodedAuth);
ctx.addZuulRequestHeader(HttpHeaders.AUTHORIZATION, authValue);
return null;
}
}
编辑:您还需要为此过滤器创建 bean,以便 Zuul 获取它。因此,在您的配置 class/Main 应用程序 class 中,添加:
@Bean
public AuthenticatedFilter getAuthenticatedFilter () {
return new AuthenticatedFilter();
}
我有一个 spring 启动微服务,它需要基本的身份验证数据,即固定 userid/password(如 admin/password)。我正在使用 Spring 云 netflix 生态系统来编排微服务。 Zuul 是我的 API 网关。
我的问题是如何从 Zuul 向我的应用程序发送基本身份验证详细信息,以便在通过 Zuul 访问时它不会要求 userid/password。
您可以添加自定义过滤器并将授权 header 添加到请求中。
授权 header 只是 base64 编码的 "username:password" 字符串。
public class AuthenticatedFilter 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();
String auth = "username" + ":" + "password";
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1")));
String authValue = "Basic " + new String(encodedAuth);
ctx.addZuulRequestHeader(HttpHeaders.AUTHORIZATION, authValue);
return null;
}
}
编辑:您还需要为此过滤器创建 bean,以便 Zuul 获取它。因此,在您的配置 class/Main 应用程序 class 中,添加:
@Bean
public AuthenticatedFilter getAuthenticatedFilter () {
return new AuthenticatedFilter();
}