色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

JAVA HTTP反向代理實(shí)現(xiàn)過程詳解

瀏覽:2日期:2022-08-30 09:23:08

 反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時(shí)代理服務(wù)器對外就表現(xiàn)為一個(gè)反向代理服務(wù)器。

 簡單來說,你的反向代理服務(wù)器會(huì)接收請求,但其自身不處理該請求,而是對請求經(jīng)過一些處理,例如添加日志、緩存、身份驗(yàn)證等服務(wù),然后再將請求轉(zhuǎn)發(fā)到相應(yīng)的應(yīng)用服務(wù)器中進(jìn)行處理,最后將處理結(jié)果返回。

我目前的需求是,A應(yīng)用需要訪問B應(yīng)用的報(bào)表頁面,B應(yīng)用沒有源碼,要求自動(dòng)處理B應(yīng)用的登錄權(quán)限。避免用戶重復(fù)登錄。

1. 引入相關(guān)依賴

<dependency> <groupId>org.mitre.dsmiley.httpproxy</groupId> <artifactId>smiley-http-proxy-servlet</artifactId> <version>1.11</version></dependency>

這個(gè)jar包,只有兩個(gè)類,其中核心的就是 ProxyServlet,

作者重寫了HttpServlet的相關(guān)方法。他復(fù)制了新的request為proxyRequest,

然后替換了地址和相關(guān)屬性,并使用HttpClient將proxyRequest發(fā)送出去,

然后將接收到的proxyResponse的內(nèi)容再復(fù)制給 HttpResponse 。

相當(dāng)于中轉(zhuǎn)站。具體請看源碼。

https://github.com/mitre/HTTP-Proxy-Servlet

2.spring使用:

2.1 application.yml增加代理參數(shù)配置

# 設(shè)置代理proxy: servlet_url: /webappB/* target_url: https://webappB_HOST_IP:8001/webappB其他demo # servlet_url: /proxybaidu/* # target_url: https://www.baidu.com

此處有玄機(jī):

為什么源url和目標(biāo)url根路徑要一致(都為/webappB/)呢?

這是因?yàn)椋?target_url頁面里不止文本顯示,還有其他資源的調(diào)用,比如圖片,比如里面的js又調(diào)用了其他url.

這樣的話,假如 target頁面里某個(gè)圖片的url是相對路徑 img/test.jpg;

你的頁面上圖的 /webappC/image/test.jpg; 這樣host換了以后是找不到圖片地址的。

當(dāng)然你也可以改下proxyServlet的源碼,讓它換成正確的url地址。如果不想改源碼的話,那還是一致的比較好。少麻煩。

2.2 注冊servlet.

@Configurationpublic class ProxyServletConfiguration { /** * 讀取配置文件中路由設(shè)置 */ @Value('${proxy.servlet_url}') private String servlet_url; /** * 讀取配置中代理目標(biāo)地址 */ @Value('${proxy.target_url}') private String target_url; @Bean public Servlet createProxyServlet() { /** 創(chuàng)建新的ProxyServlet */ return new ProxyServlet(); } @Bean public ServletRegistrationBean proxyServletRegistration() { ServletRegistrationBean registrationBean = new ServletRegistrationBean(createProxyServlet(), servlet_url); //設(shè)置網(wǎng)址以及參數(shù) Map<String, String> params = ImmutableMap.of('targetUri', target_url, 'log', 'true'); registrationBean.setInitParameters(params); return registrationBean; }}

2.3測試。ok.

localhost:8080/proxybaidu/

2.4. 當(dāng)然你也可以重新寫個(gè)類,MyProxyServlet繼承ProxyServlet.

重新其中的 execute方法。添加相關(guān)的功能。日志,權(quán)限登錄等。

@Override protected HttpResponse (HttpServletRequest servletRequest, HttpServletResponse servletResponse, HttpRequest proxyRequest) throws IOException {//設(shè)置header里的授權(quán)信息 proxyRequest.setHeader('Authorization', 'Basic ' + getWebappBLoginAuth()); HttpResponse response = super.doExecute(servletRequest, servletResponse, proxyRequest);// 設(shè)置跨域,暫時(shí)不用。// String origin = servletRequest.getHeader('origin');// response.setHeader('Access-Control-Allow-Origin', origin);// response.setHeader('Access-Control-Allow-Credentials', 'true');// response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');// response.setHeader('Access-Control-Allow-Headers',//'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin' +// ',User-Agent,X-Mx-ReqToken,X-Requested-With'); return response; }

2.5 后記

這個(gè)ProxyServlet 跟 nginx看著基本功能一樣了,都可以反向代理了。不過擴(kuò)展功能和IO性能肯定跟nginx沒法比。但是這個(gè)是用java語言寫的。方便二次開發(fā)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: a国产在线| 国产伦一区二区三区四区久久 | 毛片免费看看 | 亚洲精品一 | 成年女人在线视频 | 久久国产欧美日韩精品 | 大伊香蕉精品视频在线 | 日本成人免费在线观看 | 国产精品制服 | 亚洲 欧美 91 | 欧美日韩精品国产一区在线 | 欧美在线成人免费国产 | 理论视频在线观看 | 美女一级毛片免费不卡视频 | 欧美视频精品在线观看 | 免费观看一区二区 | 在线国产网站 | 欧美一线不卡在线播放 | 久久影院在线 | 国产在线播放一区二区 | 纯欧美一级毛片_免费 | 毛片成人 | 亚洲线精品久久一区二区三区 | 国产在线免 | 悟空影视大全免费高清 | 亚洲欧美综合久久 | 日韩国产欧美精品综合二区 | 亚洲精品中文字幕久久久久久 | 成人精品视频一区二区在线 | 婷婷三级| 国产三级精品久久三级国专区 | 国产亚洲人成网站在线观看 | 精品国产自在在线在线观看 | 国产成人精品无缓存在线播放 | 久久精品国产半推半就 | 国产高清在线观看视频手机版 | 国产日韩欧美一区二区三区综合 | 欧美成年黄网站色高清视频 | 日本卡一卡2卡3卡4精品卡无人区 | 中文一区 | 亚洲一区2区三区4区5区 |