ZUUL向下游应用程序发送基本身份验证

问题描述 投票:2回答:1

我有一个spring boot微服务,它需要基本的身份验证数据,即固定的用户ID /密码(如admin / password)。我正在使用Spring cloud netflix生态系统来编排微服务。 Zuul是我的API网关。

我的问题是如何从Zuul向我的应用程序发送基本身份验证详细信息,以便在通过Zuul访问时,它不会要求用户ID /密码。

netflix-zuul spring-cloud-netflix
1个回答
1
投票

您可以添加自定义筛选器并将Authorization标头添加到请求中。 Authorization标头只是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;
  }
}

编辑:你还需要为Zuul的这个过滤器创建bean来获取它。因此,在Configuration类/ Main应用程序类中,添加:

@Bean
public AuthenticatedFilter getAuthenticatedFilter () {
    return new AuthenticatedFilter();
}
© www.soinside.com 2019 - 2024. All rights reserved.