How do I set the proxy to be used by the JVM

前端 未结 19 2085
孤街浪徒
孤街浪徒 2020-11-22 05:51

Many times, a Java app needs to connect to the Internet. The most common example happens when it is reading an XML file and needs to download its schema.

I am behind

19条回答
  •  青春惊慌失措
    2020-11-22 06:14

    Recently I've discovered the way to allow JVM to use browser proxy settings. What you need to do is to add ${java.home}/lib/deploy.jar to your project and to init the library like the following:

    import com.sun.deploy.net.proxy.DeployProxySelector;
    import com.sun.deploy.services.PlatformType;
    import com.sun.deploy.services.ServiceManager;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public abstract class ExtendedProxyManager {
    
        private static final Log logger = LogFactory.getLog(ExtendedProxyManager.class);
    
        /**
         * After calling this method, proxy settings can be magically retrieved from default browser settings.
         */
        public static boolean init() {
            logger.debug("Init started");
    
            // Initialization code was taken from com.sun.deploy.ClientContainer:
            ServiceManager
                    .setService(System.getProperty("os.name").toLowerCase().indexOf("windows") != -1 ? PlatformType.STANDALONE_TIGER_WIN32
                            : PlatformType.STANDALONE_TIGER_UNIX);
    
            try {
                // This will call ProxySelector.setDefault():
                DeployProxySelector.reset();
            } catch (Throwable throwable) {
                logger.error("Unable to initialize extended dynamic browser proxy settings support.", throwable);
    
                return false;
            }
    
            return true;
        }
    }
    

    Afterwards the proxy settings are available to Java API via java.net.ProxySelector.

    The only problem with this approach is that you need to start JVM with deploy.jar in bootclasspath e.g. java -Xbootclasspath/a:"%JAVA_HOME%\jre\lib\deploy.jar" -jar my.jar. If somebody knows how to overcome this limitation, let me know.

提交回复
热议问题