2016-11-18 2 views
0

Kann ich die Proxy-Server-Informationen für eine einzelne in Tomcat bereitgestellte Webanwendung steuern oder konfigurieren? Bei der Arbeit bin ich hinter einer Unternehmens-Firewall, so dass jeder Code, externe Web-Ressourcen zugreift (3rd-Party-REST-API, in meinem Fall) funktioniert nur, wenn ich Proxy-Informationen in der Ausführungsumgebung:Proxy-Server-Einstellung für Tomcat-Webanwendung nur in Entwicklung

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

Aber ich möchte dies nicht in den Code aufnehmen, da die Produktionsumgebung nicht den Proxy-Server umfasst.

Wie kann ich diese Konfiguration externalisieren, damit ich Proxy-Server-Konfiguration/Flags in der Entwicklungsumgebung festlegen kann, aber den Schritt in der Produktionsumgebung überspringen? Welche Lösung auch immer verwendet wird, sie sollte nur eine bestimmte Webanwendung und nicht alle Webanwendungen auf dem Tomcat-Server betreffen.

Bearbeitet 11/21/2016: Ich verwende Spring RestTemplate, um die REST-API-Methode aufzurufen.

@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); 
} 

Antwort

0

Verwenden Sie keine Systemeigenschaften.

Verwenden Sie stattdessen die tatsächliche API der REST-API, um die Proxy-Informationen direkt festzulegen. Andernfalls werden Sie die gesamte JVM beeinflussen, was wahrscheinlich nicht das ist, was Sie tun möchten.

Da Sie Spring RestTemplate verwenden, diese SO Antwort sollten Sie programmatisch hilft der Proxy verwendet wird, ändern:

+0

Ja, das ist genau das, was ich zu vermeiden versuchen. Können Sie ein Code-Snippet hinzufügen, wie ich das mithilfe der API erreichen kann? Dies gilt auch nur für die Entwicklung. Daher möchte ich den REST-API-Code nicht wirklich beeinflussen. Mit anderen Worten, Produktionscode sollte keine Proxy-Informationen festlegen. –

+0

Sie haben nie erwähnt, welche REST-API von Drittanbietern Sie verwendet haben, also kann ich kein Codebeispiel bereitstellen. –

+0

Ich bin mir nicht sicher, warum ein bestimmter Drittanbieterdienst für den Code relevant ist. Alles, was ich habe, ist ihre Service-URL (inkl. Der Operation) und der API-Schlüssel. Wenn ich die Proxy-Server-Informationen in der JVM einstelle, gibt der REST-Aufruf eine Antwort zurück. Wenn ich die Proxy-Server-Informationen nicht festlege, läuft der Anruf ab. Ich kenne nur zwei Möglichkeiten ... (i) setze die Information in der Umgebung oder (ii) setze bedingt einen 'java.net.Proxy' und irgendeine Art von' org.springframework.http.client.ClientHttpRequestFactory' ein, wenn der Umwelt entspricht der Entwicklung. Ich wollte vermeiden, die gesamte JVM zu beeinträchtigen oder den Code zu verschmutzen. –