0
我可以控制或配置部署在Tomcat中的单个webapp的代理服务器信息吗?在工作中,我是一个企业防火墙后面,所以如果我在执行环境中设置代理信息访问外部网络资源(第三方REST API,在我的情况)的任何代码只会工作:仅在开发中的Tomcat webapp的代理服务器设置
System.setProperty("https.proxyHost", "proxy.company.com");
System.setProperty("https.proxyPort", "2345");
但我不希望将其包含在代码中,因为生产环境不涉及代理服务器。
如何外部化此配置,以便我可以在开发环境中设置代理服务器配置/标志,但跳过生产环境中的步骤?无论解决方案是什么,它只会影响特定的Web应用程序,而不会影响Tomcat服务器上的所有Web应用程序。
编辑11/21/2016:我使用Spring的RestTemplate
来调用REST API方法。
@RequestMapping(value="/{userId}",
method = RequestMethod.GET)
public ResponseEntity<String> getUserInfo(@PathVariable String userId,
@RequestHeader String apikey) {
String url = UserAPIProperties.getUsersUrl() + "https://stackoverflow.com/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);
}
是的,这正是我想避免的。你可以在我如何使用API实现该代码片段中包含代码片段?此外,这仅适用于开发,所以我不想影响REST API代码。换句话说,生产代码不应该设置任何代理信息。 –
您从未提及过您使用过的第三方REST API,因此不能提供代码示例。 –
我不确定为什么特定的第三方服务与代码相关。我所拥有的是他们的服务URL(包括操作)和API密钥。如果我在JVM中设置代理服务器信息,则REST调用返回响应就好了。如果我没有设置代理服务器信息,则通话超时。我知道只有两个选项...(i)在环境中设置信息或(ii)有条件地使用'java.net.Proxy'和某种类型的'org.springframework.http.client.ClientHttpRequestFactory'环境对应于发展。我想避免影响整个JVM,或者污染代码。 –