【问题标题】:Static field in the java libraryjava库中的静态字段
【发布时间】:2019-11-15 06:56:05
【问题描述】:

我正在使用一种支付系统的 java SDK 库。

在该库中,您必须设置他们之前在静态字段中提供给您的 API 密钥:

public static volatile String apiKey;

此库发出的每个 HTTP 请求都在标头中包含此 apiKey。

我的任务 - 聚合该支付系统的用户。每个用户都有自己的 API Key。

当用户数为2时,我刚刚做了坏事:

public synchronized void pay() {
     Library.apiKey = securityService.currentUser().key();
     Library.pay(...)
     ...
}

它有效,但每个人都明白这是一种不好的坏习惯。现在我必须支持 100 多个用户。我的决定将慢 100 倍,更不用说其他问题了。

我想继续使用这个库。但是以多线程方式。当然,如果我自己提出要求,我会这样做:

public void pay() {
     HttpHeader headers;
     headers.put("api_key", securityService.user().key());
     httpClient.post(headers...)
}

我知道这个库不适合我的任务。但我需要那个库,它在自己内部做了很多工作。

如果没有可能,我必须分叉并更改以适应我的需求。

我附上图书馆源代码的链接。 https://github.com/stripe/stripe-java/tree/master/src/main/java/com/stripe

【问题讨论】:

  • 您是否阅读了您提供的 github 存储库的文档(README)?它清楚地提到了处理多个关键场景的替代方法。 github.com/stripe/stripe-java#per-request-configuration
  • @Udith Gunaratna 谢谢,我错过了,我在网站上阅读了文档,但在 Github 存储库中没有。

标签: java http static


【解决方案1】:

所有的请求方法都接受一个可选的RequestOptions 对象。在RequestOptions 中,您可以为每个方法添加一个秘密 API 密钥。

RequestOptions requestOptions = RequestOptions.builder()
    .setApiKey("sk_test_...")
    .build();

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多