6

我目前正在使用 Jhipster 生成以下组件:

  • UAA - 身份验证服务器
  • API 网关
  • 微服务 - 产品1
  • 服务发现 - 领事

其他组件:

  • 自定义前端 (Angular 4) - 在一个单独的项目中

还需要注意的是,自定义前端使用了 Jhipster angular 4 代码,该代码可以在 vanilla Jhipster Api Gateway 中找到。这包括 customHttpProvider。

包含的类如下图所示: 在此处输入图像描述

目前,我可以使用此设置成功登录并调用 UAA 上的 API,但是,当我尝试调用 Product 上的任何 API 时,我得到401 Unauthorized,例如 Post to Product1/api/zcd

这些服务在 Consul 中都是可见的和绿色的,网关也有 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

解决了:

有两件事给我造成了问题。需要注意的是,它们与 JHipster 没有直接关联,而是与 Jhipster 集成时出现的问题:

问题:

  1. 轴突 3
  2. 具有延迟加载模块的自定义 Angular 4 前端。

解决方案:

    • 我已将 axon 3 包含到产品微服务中,并且作为 axons 配置的一部分,它初始化了一个令牌存储(与安全性无关)。
    • MicroserviceSecurityConfiguration 中原本属于 JwtTokenStore 类型的 tokenStore bean 被重写为 InMemoryTokenStore。
    • 解决方案是将 MicroserviceSecurityConfiguration 中的 tokenStore bean 重命名为 jwtTokenStore。
    • 我有许多延迟加载的模块。根据这种情况下的文档,有一个 SharedServiceModule 使用 forRoot() 并在 AppModule 中导入。
    • 但是,当我在 ProductModule 中导入服务 .eg ProductService 时,它​​会覆盖在 SharedServiceModule 中导入的 Http Factory(在 AppModule 中导入 Http Factory 时的行为相同)。
    • 解决方案是创建一个与 customHttpProvider 函数(在 SharedServiceModule 中)处于同一级别的 HttpProviderService。然后,它为应用程序中较低级别的所有其他服务管理 Http。 共享服务模块 HttpProviderService
于 2017-08-28T15:40:10.403 回答