2017-10-03 17 views
2

基本的な認証データ(admin/passwordなどの固定ユーザーID /パスワード)を必要とするスプリングブートマイクロサービスがあります。私は、春のクラウドネットフリックスエコシステムを使用して、マイクロサービスを調整しています。 Zuulは私のAPIゲートウェイです。ZUULはダウンストリームアプリケーションに基本認証を送信します

私の質問基本的な認証の詳細をZuulからアクセスすると、ユーザーID /パスワードを要求しないように、私のアプリケーションにZuulから送信する方法を私の質問。

答えて

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; 
    } 
} 

EDIT:Zuulがこのフィルタ用のBeanを作成する必要があります。あなたのConfigurationクラス/メインアプリケーションクラスに次のように追加してください:

@Bean 
public AuthenticatedFilter getAuthenticatedFilter() { 
    return new AuthenticatedFilter(); 
} 
+0

ありがとう、それを試みますが、認証ヘッダーの一部としてユーザーIDとパスワードを送信する方法はありますか? – Debopam

+0

私は自分の答えを更新しました。 簡潔に言えば、ヘッダーのuseridとpassword部分を生成するために、単に "username:password"文字列をbase64でエンコードします。 – pan

+0

StandardCharsetsを使用することもできます – rj2700