一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
前言
主要是因为公司内网的网络安全策略的限制,出网的时候需要走一层网络代理或者配置防火墙层面的网络白名单。 常见的应用场景,自建的机房,需要访问外网的一些服务,或者客户提供的一些网络接口。这个时候需要用到代理服务器,
代理服务器的作用:
- 防止攻击 隐藏自己的真实地址信息,还可隐藏自己的IP,防止被黑客攻击。
- 缓存 把经常访问的一些文档、页面缓存到代理服务器上,这样,可以减少访问从远程服务器上下载文档、页面。
- 限制出站连接, 比如公司会使用代理服务器配置一些网址,阻止访问外网(购物网站等)
Java支持的代理协议
java中支持的代理协议主要有4种, HTTP代理、HTTPS代理、Socket代理、FTP代理等。
- 【HTTP】
http.proxyHost
http.proxyPort [默认值:80]
http.nonProxyHosts \ - 【HTTPS】
https.proxyHost
https.proxyPort [默认值:443]
https.nonProxyHosts - 【FTP】
ftp.proxyHost
ftp.proxyPort [默认值:80]
ftp.nonProxyHosts - 【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";
}
}
当然如果需要认证也可以在访问头中加一些认证的参数。