在Java WEB应用中设置网络代理

491 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

前言

主要是因为公司内网的网络安全策略的限制,出网的时候需要走一层网络代理或者配置防火墙层面的网络白名单。 常见的应用场景,自建的机房,需要访问外网的一些服务,或者客户提供的一些网络接口。这个时候需要用到代理服务器,

代理服务器的作用

  1. 防止攻击 隐藏自己的真实地址信息,还可隐藏自己的IP,防止被黑客攻击。
  2. 缓存 把经常访问的一些文档、页面缓存到代理服务器上,这样,可以减少访问从远程服务器上下载文档、页面。
  3. 限制出站连接, 比如公司会使用代理服务器配置一些网址,阻止访问外网(购物网站等)

Java支持的代理协议

java中支持的代理协议主要有4种, HTTP代理、HTTPS代理、Socket代理、FTP代理等。

  1. 【HTTP】
    http.proxyHost
    http.proxyPort [默认值:80]
    http.nonProxyHosts \
  2. 【HTTPS】
    https.proxyHost
    https.proxyPort [默认值:443]
    https.nonProxyHosts
  3. 【FTP】 ftp.proxyHost
    ftp.proxyPort [默认值:80]
    ftp.nonProxyHosts
  4. 【SOCKS】
    socksProxyHost
    socksProxyPort [默认值:1080]

设置代理的方式

1、 全局代理

在系统启动时,使用-D项来设置代理。 例如: java -Dhttp.ProxyHost=127.0.0.0 -Dhttp.ProxyPort=7001 -jar demo-proxy-0.0.1-SNAPSHOT.jar

代理的作用域:整个系统

2、 针对特定的接口设置代理

@SpringBootApplication
@RestController
@Slf4j
public class DemoProxyApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoProxyApplication.class, args);
    }


    @GetMapping("/ok")
    public String ok() throws IOException {

        //设置请求访问的地址
        TinyURLBatchQueryREQ batchQueryREQ = new TinyURLBatchQueryREQ();
        List<String> uniqueList = new ArrayList<>();
        uniqueList.add(UUID.randomUUID().toString().replace("-", ""));
        batchQueryREQ.setActualUrl("www.baidu.com")
                .setShortDomain("sus1.cn")
                .setUniqueIdList(uniqueList);


        String result = HttpRequest.post("http://58.211.17.197:50005/shorturl/api/url/batch/v1/1001")
                .setHttpProxy("172.16.95.125", 13128)
                .body(JSON.toJSONString(batchQueryREQ))
                .execute().body();
        log.info("[CustomerTinyDomainFacade] getBatchTinyUrlList result:{}", result);
        return "ok";
    }

}

当然如果需要认证也可以在访问头中加一些认证的参数。