Настройки на Tomcat и прокси

Има сървлет, който се изпълнява на tomcat7 и прави извикване на уеб услуга към уебсайт на трета страна. Обаждането работи добре от Windows машината, но когато се стартира от tomcat, не успява. Няма ли Tomcat автоматично да използва прокси настройките на Windows? добавих

set JAVA_OPTS=%JAVA_OPTS% "-Dhttp.proxySet=true"
set JAVA_OPTS=%JAVA_OPTS% "-Dhttp.proxyHost=IP"
set JAVA_OPTS=%JAVA_OPTS% "-Dhttp.proxyPort=8080"

до CATALINA.BAT и

http.proxyHost=IP
http.proxyPort=8080

към catalina.properties Но все още няма промяна. Как да настроим Tomcat да използва прокси настройките на Windows и има ли начин да проверим дали tomcat взима посочените прокси настройки?


person icedek    schedule 06.09.2012    source източник
comment
http.proxySet не прави нищо, това е градски мит.   -  person user207421    schedule 07.09.2012
comment
Разбирам. Как предлагате да се справя с проблема.   -  person icedek    schedule 07.09.2012
comment
http.proxyHost и http.proxyPort трябва да работят. Сигурни ли сте, че вашата променлива JAVA_OPTS влиза в сила?.   -  person Jaime Hablutzel    schedule 14.02.2018


Отговори (6)


Не, Tomcat няма да използва автоматично системните настройки на прокси сървъра.

Предлагам ви да разгледате съоръженията, предоставени от java.net.Proxy. Това ви позволява динамично да указвате прокси по време на изпълнение. Системните свойства работят, но се четат само веднъж и ако Tomcat вече е използвал HttpURLConnection за собствените си цели, преди да ги настроите, това е краят: настройката няма ефект.

person user207421    schedule 07.09.2012
comment
С други думи, най-добре е да го направите в java. Също така HttpURLConnection, ако вече се използва в Tomcat, няма ли начин да го замените? Ще ги замени ли java.net.Proxy? - person icedek; 07.09.2012
comment
@icedek Когато потърсите Javadoc, както е предложено, вашите въпроси ще получат отговор. - person user207421; 08.09.2012
comment
Както каза Николае Петридан, правенето на това в кода може да бъде грозно за поддържане. Използвайте или java.net.Proxy, или системните свойства, които работят правилно: зависи от вашия случай на използване (постоянен прокси, защото вашият сървър е фирмен прокси, или специфични прокси извиквания, които варират при всяка HTTP заявка). Проблемът на Icedek вероятно е причинен от използвана друга JVM и игнорирани настройки. Вижте също: stackoverflow .com/questions/1432961/ - person spiritoo; 05.02.2014
comment
@spirito И както беше казано по-горе, използването на системните свойства може да бъде невъзможно. Тук няма прост отговор. - person user207421; 06.02.2014

Не съм съгласен с използването на java.net.Proxy.

Какво се случва, ако трябва да го промените? Нова версия, нова версия. Настройката на прокси трябва да е лесна. Работи добре както със системни свойства, така и с tomcat JAVA_OPTS. Използвах го и по двата начина. Просто обърнете внимание и се уверете, че знаете какви JAVA_OPTS са заредени, каква java се използва и т.н., защото има котки, които имат своя собствена версия на java. Относно предишния пост, няма начин java да може да се използва преди да е заредена :). Така че Tomcat не може да го използва, преди да бъдат използвани свойствата на системата... само ако tomcat използва друг JRE, който не чете свойствата на системата.

Просто тествам тази настройка:

set "JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=proxy.com -Dhttp.proxyPort=8080 "

в catalina.bat и работи добре.

person Nicolae Petridean    schedule 22.01.2013
comment
Най-доброто решение според мен. - person Diego Magdaleno; 17.04.2015
comment
най-доброто решение и според документацията. - person giannisapi; 15.06.2016
comment
Това, което се случва, ако трябва да го промените, е, че поставяте конфигурационните елементи (хост, порт) в конфигурационен файл, което е всичко, което трябва да промените. Не е необходима нова компилация и не е задължително да се издава. - person user207421; 23.04.2019
comment
Съжалявам за некропоста, просто исках да кажа, че това решение все още работи (CentOS 7, Tomcat 8.0.53, инсталирано от .tar.gz) с правилните модификации. Благодарение на този, който публикува решението, вие възвърнахте психическия ми здрав разум! :Д - person jinzo78; 10.04.2020
comment
Вече вероятно ще трябва да зададете https прокси вместо това -Dhttps.proxyHost=proxy.com -Dhttps.proxyPort=8080 - person Stomf; 13.05.2020

Докато задавате настройките на прокси сървъра, трябва да дефинирате името на прокси сървъра, както е показано по-долу:

"-Dhttp.proxyHost=proxy.example.com"
person Satheesh    schedule 23.11.2012

Създайте /bin/setenv.sh (за WINDOWS \bin\setenv.bat):

JAVA_OPTS="-Dhttp.proxySet=true -Dhttp.proxyHost=<proxy_hostname> -Dhttp.proxyPort=<port_number> -Dhttp.nonProxyHosts=<domain_one>|<domain two> $JAVA_OPTS"

ЗАБЕЛЕЖКА: ако вече имате setenv.sh/setenv.bat, можете да добавите ред от горната команда. Скриптът за стартиране на Tomcat автоматично изпълнява скрипта setenv преди стартиране на екземпляр на tomcat.

person Amit Kaneria    schedule 16.02.2016
comment
http.proxySet не прави нищо. Опитайте да го зададете false и вижте сами. Това е градски мит. - person user207421; 23.04.2019

Можете да внедрите HTTP прокси, HTTPS прокси и HTTP/HTTPS хостове без прокси също в Tomcat. Трябва да актуализирате два файла, т.е. bin/Catalina.sh и conf/catalina.properties.

person Siva Kumar Reddy G    schedule 04.07.2016

Можете да използвате библиотеката jProxyLoader. С помощта на тази библиотека можете да конфигурирате Tomcat да използва прокси само за връзки към определен хост. Във вашия случай можете да конфигурирате Tomcat да преминава през прокси само за връзки към хост, обслужващ уеб услугата (всички други връзки ще се обработват от Tomcat по "нормален" начин - без прокси).

Пълната настройка е обяснена на уебсайта на проекта: http://jproxyloader.sourceforge.net/examples/web-application-on-tomcat.html

person walkeros    schedule 04.08.2014