仅限开发中的Tomcat webapp的代理服务器设置

时间:2016-11-18 07:12:14

标签: tomcat web-applications proxy

我可以控制或配置Tomcat中部署的单个Web应用程序的代理服务器信息吗?在工作中,我在公司防火墙后面,所以任何访问外部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);
}

1 个答案:

答案 0 :(得分:0)

请勿使用系统属性执行此操作。

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

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