我可以控制或配置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);
}
答案 0 :(得分:0)
请勿使用系统属性执行此操作。
相反,请使用REST API的实际API直接设置代理信息。否则,您将影响整个JVM,这可能不是您想要做的。
由于您使用的是Spring的RestTemplate,这个SO答案应该可以帮助您以编程方式更改正在使用的代理: