0

App1とApp2の2つのアプリケーションを切り替えるロードサーバーアプリケーションがあります。各アプリには銀行と通信する独自​​のIFrameがありますが、銀行がデータを返すとき、ロードサーバーはどのアプリがそれであったかを区別できません。それを調べてみると、プロキシの問題であることがわかりました。

proxyHostその結果、アプリケーションに&を使用させようとしましたが、機能proxyportしませんでした。次に、Jbossに特定のproxyHost&を使用させましproxyportたが、どちらも機能しませんでした。ボックスでデフォルトのプロキシを使用し、構成を気にしません。

Jboss起動スクリプトでのproxyHost&の設定( ):Jbossログは、Java VM引数(たとえば)を受け入れたことを示しました。アプリケーションを実行すると、ボックスのデフォルトのプロキシ設定が引き続き実行されます。proxyPortbin\run.bat-Dhttp.proxyHost=XX.XX.XX.XX -Dhttp.proxyPort=8080

google&stackoverflowで検索し、さまざまなアイデアを試しましたが、うまくいきませんでした。誰かがそれに光を当ててくれませんか?

4

2 に答える 2

0

次の JVM 引数を使用してアプリを実行してみてください: -Dsun.net.inetaddr.ttl=0 -Dnetworkaddress.cache.ttl=0?

DNS 設定は、要求が成功した後にキャッシュされます。これらのパラメーターはキャッシュを無効にします。

于 2013-03-19T21:31:17.810 に答える
0

アプリケーションが proxyHost の VM 引数を無視し、アプリケーションが実行されているボックスのデフォルト プロキシのみを使用するように強制できます。デフォルトのプロキシを出力して特定のボックスで実行するだけの小さな Java プログラムを作成できます (このようなものです)。

import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URISyntaxException;
import java.util.Iterator;
import java.util.List;

import java.net.URI;

public class PrintDefaultProxy {
    public static void main(String[] args) {

        // If you clear these 2 properties then set java.net.useSystemProxies to true, it 
        // will use the default System Proxy and ignore any settings given to the VM
        // e.g. http.proxyHost & http.proxyPort
        System.setProperty("http.proxyHost", "");
        System.setProperty("http.proxyPort", "");

        System.setProperty("java.net.useSystemProxies", "true");
        System.out.println("detecting proxies");
        List l = null;
        try {
            String url = "http://google.com.au/";
            l = ProxySelector.getDefault().select(new URI(url));
        } 
        catch (URISyntaxException e) {
            e.printStackTrace();
        }
        if (l != null) {
            for (Iterator iter = l.iterator(); iter.hasNext();) {
                java.net.Proxy proxy = (java.net.Proxy) iter.next();
                System.out.println("proxy Type : " + proxy.type());

                InetSocketAddress addr = (InetSocketAddress) proxy.address();

                if (addr == null) {
                    System.out.println("No Proxy");
                } else {
                    System.out.println("proxy hostname : " + addr.getHostName());
                    System.setProperty("http.proxyHost", addr.getHostName());
                    System.out.println("proxy port : " + addr.getPort());
                    System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
                }
            }
        }
    }
}

基本的にコードでは、http.proxyHost と http.proxyPort をクリアしてから java.net.useSystemProxies を true に設定すると、システムのデフォルト プロキシ (存在する場合) が使用され、VM 引数は無視されます。

System.setProperty("http.proxyHost", "");
System.setProperty("http.proxyPort", "");

System.setProperty("java.net.useSystemProxies", "true");
System.out.println("detecting proxies");

次に、これをボックスで実行し、いくつかの偽のプロキシ アドレスを渡します。

C:\t>"C:\Program Files\Java\jdk1.6.0_19\bin\java.exe" -Dhttp.proxyHost=99.0.0.99.9 -Dhttp.proxyPort=8080  PrintDefaultProxy
detecting proxies
proxy Type : DIRECT
No Proxy

これら 2 つのプロパティをクリアしないと、JVM に渡す引数が使用されることに注意してください。ただし、私の理解では、アプリケーションが実行しているようには見えません。これは、proxyHost を具体的に設定しなくても、アプリケーションが「そのまま機能する」方法です。これが、JVM/Jboss レベルで指定した設定を無視する理由である可能性が最も高いです。

動作が Jboss でこれらの設定を変更しようとして経験したことと一致している場合、proxyHost を使用するようにアプリケーションまたは Jboss レベルで設定することはできず、ネットワーク レベルで行う必要がある可能性が高いことを意味します。

于 2013-03-20T06:08:45.370 に答える