Jakarta ee Tomcat和代理设置

Jakarta ee Tomcat和代理设置,jakarta-ee,tomcat,proxy,tomcat7,Jakarta Ee,Tomcat,Proxy,Tomcat7,tomcat7上运行着一个servlet,它向第三方网站发出webservice调用。 该调用在windows机器上运行正常,但在tomcat上运行时失败。 Tomcat不会自动使用Windows的代理设置吗? 我补充说 去卡特琳娜。巴特 及 卡塔琳娜酒店 但仍然没有变化。 如何将Tomcat设置为使用windows的代理设置?是否有方法检查Tomcat是否正在使用指定的代理设置?否,Tomcat不会自动使用系统代理设置 我建议您研究一下java.net.Proxy提供的工具。这允许您在运行时动

tomcat7上运行着一个servlet,它向第三方网站发出webservice调用。 该调用在windows机器上运行正常,但在tomcat上运行时失败。 Tomcat不会自动使用Windows的代理设置吗? 我补充说

去卡特琳娜。巴特 及

卡塔琳娜酒店 但仍然没有变化。
如何将Tomcat设置为使用windows的代理设置?是否有方法检查Tomcat是否正在使用指定的代理设置?

否,Tomcat不会自动使用系统代理设置


我建议您研究一下
java.net.Proxy
提供的工具。这允许您在运行时动态指定代理。系统属性可以工作,但只能读取一次,如果Tomcat在设置它们之前已经出于自己的目的使用了一个
HttpURLConnection
,则到此为止:该设置无效。

在指定代理设置时,必须定义代理服务器名称,如下所示:

"-Dhttp.proxyHost=proxy.example.com"

我不同意使用
java.net.Proxy


如果需要更改,会发生什么情况?新版本,新版本。代理的设置应该很容易。它可以很好地与系统属性或tomcat JAVA_选项一起工作。我用了两种方法。只要注意并确保您知道加载了哪些JAVA_选项,使用了哪些JAVA等等,因为有些Tomcat有自己的JAVA版本。根据上一篇文章,在加载java之前无法使用java:)。因此,只有在Tomcat使用另一个不读取系统属性的JRE时,Tomcat才能在使用系统属性之前使用它

我只是测试一下这个设置:

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

在catalina.bat中使用,效果很好。

您可以使用jProxyLoader库。使用这个库,您可以将Tomcat配置为仅对特定主机的连接使用代理。在您的情况下,您可以将Tomcat配置为仅通过代理连接到为Web服务提供服务的主机(所有其他连接将由Tomcat“正常”方式处理-不使用代理)

项目网站上解释了完整的设置:

创建一个/bin/setenv.sh(适用于WINDOWS\bin\setenv.bat):

JAVA_OPTS=“-Dhttp.proxySet=true-Dhttp.proxyHost=-Dhttp.proxyPort=-Dhttp.nonProxyHosts=|$JAVA_OPTS”

注意:如果您已经拥有setenv.sh/setenv.bat,您可以添加一行上述命令。Tomcat启动脚本在启动Tomcat实例之前自动运行setenv脚本。

您也可以在Tomcat中实现HTTP代理、HTTPS代理和HTTP/HTTPS非代理主机。您需要更新两个文件,即
bin/Catalina.sh
conf/Catalina.properties

http.proxySet不起任何作用,这是一个城市神话。我明白了。您建议我如何解决这个问题。
http.proxyHost
http.proxyPort
应该可以工作。你确定你的
JAVA\u OPTS
变量正在生效吗?换句话说,最好用JAVA来实现。还有HttpURLConnection,如果已经在Tomcat中使用过,是否没有办法覆盖它?java.net.Proxy会覆盖它们吗?@icedek当您按照建议查找Javadoc时,您的问题将得到回答。正如Nicolae Petridan所说,在代码中这样做可能很难维护。可以使用java.net.Proxy,也可以使用系统属性,它们确实可以正常工作:这取决于您的用例(永久代理,因为您的服务器需要一个公司代理,或者特定的代理调用,每个HTTP请求都会有所不同)。Icedek的问题可能是由于使用了另一个JVM而忽略了设置造成的。另请参阅:@spirito,如上所述,使用系统属性可能不可行。这里没有简单的答案。在我看来,这是最好的解决方案。根据文档,最好的解决方案。如果您需要更改它,会发生什么,就是将配置元素(主机、端口)放入一个配置文件中,这就是您需要更改的全部内容。不需要新版本,也不需要发布。对于necropost,我很抱歉,我只是想告诉大家,经过正确的修改,这个解决方案(CentOS 7,Tomcat 8.0.53,从.tar.gz安装)仍在运行。多亏了发布解决方案的人,你恢复了我的精神状态!:DIt现在可能需要设置https代理—Dhttps.proxyHost=proxy.com—Dhttps.proxyPort=8080
http.proxySet
不做任何操作。尝试将其设置为false,然后自己查看。这是一个城市神话。
"-Dhttp.proxyHost=proxy.example.com"
set "JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=proxy.com -Dhttp.proxyPort=8080 "
JAVA_OPTS="-Dhttp.proxySet=true -Dhttp.proxyHost=<proxy_hostname> -Dhttp.proxyPort=<port_number> -Dhttp.nonProxyHosts=<domain_one>|<domain two> $JAVA_OPTS"