【问题标题】:Proxy server setting for Tomcat webapp in development onlyTomcat webapp 的代理服务器设置仅在开发中
【发布时间】:2017-04-01 23:11:33
【问题描述】:

我可以为部署在 Tomcat 中的单个 webapp 控制或配置代理服务器信息吗?在工作中,我位于公司防火墙后面,因此任何访问外部 Web 资源(在我的情况下为第三方 REST API)的代码只有在我在执行环境中设置代理信息时才能工作:

System.setProperty("https.proxyHost", "proxy.company.com");
System.setProperty("https.proxyPort", "2345");

但我不想在代码中包含这个,因为生产环境不涉及代理服务器。

如何将此配置外部化,以便在开发环境中设置代理服务器配置/标志,但在生产环境中跳过该步骤?无论解决方案是什么,它都应该只影响特定的 Web 应用程序,而不是 Tomcat 服务器上的所有 Web 应用程序。

2016 年 11 月 21 日编辑:我正在使用 Spring 的 RestTemplate 来调用 REST API 方法。

@RequestMapping(value="/{userId}",
        method = RequestMethod.GET)
public ResponseEntity<String> getUserInfo(@PathVariable String userId,
        @RequestHeader String apikey) {

    String url = UserAPIProperties.getUsersUrl() + "/users/{userId}";

    // Set headers for the request
    Map<String,Object> headersMap = new HashMap<String,Object>();
    headersMap.put("apiKey", apiKey);
    headersMap.put("Accept", "application/json");
    HttpEntity<?> httpEntity = getHttpEntity(headersMap);

    log.debug("API Key: {}, User ID: {}", apikey, userId);

    RestTemplate restTemplate = new RestTemplate();
    return restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class, userId);
}

【问题讨论】:

    标签: tomcat web-applications proxy


    【解决方案1】:

    不要使用系统属性执行此操作。

    改为使用 REST API 的实际 API 直接设置代理信息。否则,您将影响整个 JVM,这可能不是您想要做的。

    由于您使用的是 Spring 的 RestTemplate,因此这个 SO 答案应该可以帮助您以编程方式更改正在使用的代理:

    【讨论】:

    • 是的,这正是我想要避免的。你能包含一个关于我如何使用 API 实现的代码 sn-p 吗?此外,这仅适用于开发,所以我真的不想影响 REST API 代码。换句话说,生产代码不应该设置任何代理信息。
    • 您从未提及您使用的是什么 3rd-party REST API,所以不,我无法提供代码示例。
    • 我不确定为什么特定的第 3 方服务会与代码相关。我所拥有的只是他们的服务 URL(包括操作)和 API 密钥。如果我在 JVM 中设置代理服务器信息,则 REST 调用会返回一个响应。如果我没有设置代理服务器信息,呼叫就会超时。我只知道两个选项......(i)在环境中设置信息或(ii)有条件地使用java.net.Proxy和某种类型的org.springframework.http.client.ClientHttpRequestFactory,如果环境对应于开发。我想避免影响整个 JVM,或者污染代码。
    • 您对“第 3 方 REST API”这一短语的使用并不清楚您是在谈论 API 的 HTTP 部分,或者是否提供了 Java 语言绑定并且您正在使用它。重要的部分是您使用的是哪个 Java API...在 HTTP 对话的另一端谈论的是哪个服务供应商并不重要。
    • 我正在使用 Spring 的 RestTemplate。我在我的问题中添加了一个相关的 sn-p。感谢您澄清您的评论。
    猜你喜欢
    • 2012-01-06
    • 2018-04-22
    • 1970-01-01
    • 2017-09-12
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多