6

現在、Jhipster を使用して次のコンポーネントを生成しています。

  • UAA - 認証サーバー
  • API ゲートウェイ
  • マイクロサービス - Product1
  • サービス ディスカバリ - 領事

その他のコンポーネント:

  • カスタム フロントエンド (Angular 4) - 別のプロジェクトで

また、カスタム フロントエンドは、標準の Jhipster Api Gateway にある Jhipster angular 4 コードを使用していることにも注意してください。これには、customHttpProvider が含まれます。

含まれているクラスは、以下の画像で確認できます。 ここに画像の説明を入力

現時点では、このセットアップで正常にログインし、UAA で API を呼び出すことができますが、Product で API を呼び出そうとすると、たとえば Post to Product1/api/zcdのように401 Unauthorizedが返されます。

サービスはすべて Consul で表示され、緑色で表示されます。また、Gateway には、UAA と Product1 の両方が登録済みで使用可能なルートとして含まれています。

ここに画像の説明を入力

これまでのところ、Product への API 呼び出しを行ったときに AuthInterceptor が呼び出されているようには見えないことがわかりました。メソッドに jwt トークンを手動で追加してみましたが、これで問題は解決しましたが、リクエストをインターセプトしてトークンを追加するために customHttpProvider が使用されていない理由がわかりません。

以下の私の ProductService は、示されているようにトークンを手動で挿入すると機能しますが、これは明らかに正しい方法ではありません。

@Injectable()
export class ProductService {

    private options = new Headers();

    constructor(private http: Http) {
        this.options.append('Authorization', 'Bearer ' + 'token is inserted here');
    }

    priceProduct(productPriceRequest: productPriceRequest): Observable<IdResponse> {
        return this.http.post('Product1/api/zcd', productPriceRequest, { headers: this.options })
            .map(response => response.json());
    }
}
4

1 に答える 1

2

解決済み:

私にとって問題を引き起こしていたことが2つありました。注意すべき重要なことは、それらは JHipster に直接リンクされたものではなく、Jhipster を以下と統合することで発生した問題であるということです。

問題:

  1. 軸索3
  2. 遅延ロード モジュールを持つカスタム Angular 4 フロントエンド。

ソリューション:

    • 私は axon 3 を Product Microservice に含め、axons 構成の一部として、トークン ストアを初期化します (セキュリティとは関係ありません)。
    • タイプが JwtTokenStore であることが意図されている MicroserviceSecurityConfiguration の tokenStore Bean が、InMemoryTokenStore としてオーバーライドされていました。
    • 解決策は、MicroserviceSecurityConfiguration の tokenStore Bean の名前を jwtTokenStore に変更することでした。
    • 遅延ロードされたモジュールがいくつかありました。この状況のドキュメントによると、 forRoot() を使用し、AppModule にインポートされる SharedServiceModule があります。
    • ただし、ProductModule にインポートされていたサービス .eg ProductService があった場合、SharedServiceModule にインポートされていた Http Factory をオーバーライドしていました (AppModule に Http Factory をインポートするときと同じ動作)。
    • 解決策は、customHttpProvider 関数 (SharedServiceModule 内) と同じレベルで提供される HttpProviderService を作成することでした。これにより、アプリケーションの下位レベルで他のすべてのサービスの Http が管理されます。 SharedServiceModule HttpProviderService
于 2017-08-28T15:40:10.403 に答える