国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java使用smiley-http-proxy-servlet實現(xiàn)反向代理,跳過SSL認(rèn)證

這篇具有很好參考價值的文章主要介紹了java使用smiley-http-proxy-servlet實現(xiàn)反向代理,跳過SSL認(rèn)證。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

? ? ? ? nginx可以實現(xiàn)反向代理,但是有時候需要使用java代碼來實現(xiàn),經(jīng)過摸索,發(fā)現(xiàn)有開源的項目可以實現(xiàn),所以簡單記錄一下如何使用

一、引入依賴

? ? ? ? 沒啥好說

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

二、重寫Servlet

? ? ? ? 該項目的核心類是ProxyServlet,主要操作都在這個類中實現(xiàn)了,我們可以繼承該類,重寫其中的方法,自定義實現(xiàn)一些功能。

? ? ? ? 這里我們繼承ProxyServlet,重寫了createHttpClient方法,使其跳過ssl認(rèn)證

@Slf4j
public class CustomProxyServlet extends ProxyServlet {

    /**
     * 重寫HttpClient,跳過ssl認(rèn)證
     *
     * @return {@link HttpClient}
     */
    @Override
    protected HttpClient createHttpClient() {
        HttpClientBuilder clientBuilder = getHttpClientBuilder()
                .setDefaultRequestConfig(buildRequestConfig())
                .setDefaultSocketConfig(buildSocketConfig());

        clientBuilder.setMaxConnTotal(maxConnections);
        clientBuilder.setMaxConnPerRoute(maxConnections);
        if(! doHandleCompression) {
            clientBuilder.disableContentCompression();
        }
        if (useSystemProperties){
            clientBuilder.useSystemProperties();
        }

        SSLContext sslContext = this.getSslContext();
        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        clientBuilder.setSSLSocketFactory(sslSocketFactory);
        return super.buildHttpClient(clientBuilder);
    }

    /**
     * 獲取sslContext
     * @return {@link SSLContext}
     */
    public SSLContext getSslContext() {
        SSLContext sslContext = null;
        try {
            sslContext = SSLContextBuilder.create()
                    .loadTrustMaterial(TrustAllStrategy.INSTANCE)
                    .build();
        } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
            log.error("獲取sslContext失敗", e);
        }
        return sslContext;
    }

}

三、添加配置

? ? ? ? 添加配置類配置一下代理信息

代理信息配置

@Data
public class ProxyProperties {

    /**
     * 映射
     */
    private String mapping;

    /**
     * 目標(biāo)url
     */
    private String targetUrl;
    
}

添加配置,控制是否啟代理

@Data
@ConfigurationProperties(prefix = "proxy")
public class ProxyConfig {
    
    /**
     * 啟用日志
     */
    private boolean enableLog;

    /**
     * 配置
     */
    private List<ProxyProperties> configs;
    
}

自動裝配,獲取自定義配置信息,通過for循環(huán)配置多個servlet

import lombok.RequiredArgsConstructor;
import org.mitre.dsmiley.httpproxy.ProxyServlet;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Configuration;

import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;
import java.util.List;

@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(ProxyConfig.class)
public class ProxyAutoConfiguration implements ServletContextInitializer {
    
    private final ProxyConfig proxyConfig;
    
    /**
     * Configure the given {@link ServletContext} with any servlets, filters, listeners
     * context-params and attributes necessary for initialization.
     *
     * @param servletContext the {@code ServletContext} to initialize
     */
    @Override
    public void onStartup(ServletContext servletContext) {
        List<ProxyProperties> configs = proxyConfig.getConfigs();
        for (int i = 0; i < configs.size(); i++) {
            ProxyProperties properties = configs.get(i);
            //定義多個servlet
            ServletRegistration initServlet = servletContext.addServlet("ProxyServlet"+i, CustomProxyServlet.class);
            initServlet.addMapping(properties.getMapping());
            initServlet.setInitParameter(ProxyServlet.P_TARGET_URI, properties.getTargetUrl());
            initServlet.setInitParameter(ProxyServlet.P_FORWARDEDFOR, "false");
            initServlet.setInitParameter(ProxyServlet.P_LOG, Boolean.toString(proxyConfig.isEnableLog()));
        }
    }
}

寫在后面的話

? ? ? ? 百度使用方法,大部分只能代理一個地址,而且不支持跳過ssl認(rèn)證,所以這里記錄一下,希望對你有用。文章來源地址http://www.zghlxwxcb.cn/news/detail-696113.html

到了這里,關(guān)于java使用smiley-http-proxy-servlet實現(xiàn)反向代理,跳過SSL認(rèn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • java: 程序包javax.servlet.http不存在

    java: 程序包javax.servlet.http不存在

    當(dāng)項目從2.7.x的springboot升級到3.0.x的時候,遇到一個問題 “java: 程序包javax.servlet.http不存在” 。這可能是一些包的精簡變化導(dǎo)致的。錯誤信息如下: ?錯誤代碼段 Maven Repository: jakarta.servlet ? jakarta.servlet-api ? 6.0.0 (mvnrepository.com) 增加一下依賴即可。 修改后代碼如下(請注意

    2024年02月14日
    瀏覽(22)
  • Jmeter-使用http proxy代理錄制腳本

    Jmeter-使用http proxy代理錄制腳本

    Jmeter-使用http proxy代理錄制腳本 第1步:打卡jmeter工具新增1個線程組 第2步:給線程組添加1個HTTP請求默認(rèn)值 ? 第3步:設(shè)置下HTTP請求默認(rèn)值 第4步:在工作臺中新增1個----HTTP代理服務(wù)器 ? 第5步:設(shè)置HTTP代理服務(wù)器 設(shè)置完后記得點擊啟動 第6步:瀏覽器設(shè)置(這里選擇ie瀏覽器

    2024年02月16日
    瀏覽(96)
  • docker使用http_proxy配置代理

    docker使用http_proxy配置代理

    鋼鐵知識庫,一個學(xué)習(xí)python爬蟲、數(shù)據(jù)分析的知識庫。人生苦短,快用python。 在內(nèi)網(wǎng)服務(wù)器中,docker經(jīng)常需要下載拉取鏡像,但由于沒有網(wǎng)絡(luò)要么只能手動導(dǎo)入鏡像包,又或者通過http_proxy代理到其它服務(wù)器下載。 增加 http-proxy.conf 配置文件,正確配置好代理服務(wù)器后重啟d

    2024年01月22日
    瀏覽(23)
  • 【Java】常見面試題:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

    【Java】常見面試題:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

    努力經(jīng)營當(dāng)下 直至未來明朗! “抓包工具”:是個特殊的軟件,相當(dāng)于一個“代理程序”,瀏覽器給服務(wù)器的請求就會經(jīng)過這個代理程序(響應(yīng)也是經(jīng)過該代理程序的),進一步的就能分析出請求和響應(yīng)的結(jié)果如何。 fiddler可以抓取http請求,也可以開啟抓取https請求。 HTTP

    2024年02月12日
    瀏覽(29)
  • java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V

    java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V

    先說原因,其實都是你的jar有問題 1.jar沖突 2.少依賴了包 網(wǎng)上很多說springmvc和springwebmvc,版本高于5.3.0導(dǎo)致的,會有這個問題,那是因為他們沒看過源碼,高版本的因為在這里,多了一行代碼,這里設(shè)置的時候,會到實現(xiàn)類里面寫一個東西,this.servletResponse.setContentLengthLong(

    2024年02月11日
    瀏覽(17)
  • 高級網(wǎng)絡(luò)調(diào)試技巧:使用Charles Proxy捕獲和修改HTTP/HTTPS請求

    高級網(wǎng)絡(luò)調(diào)試技巧:使用Charles Proxy捕獲和修改HTTP/HTTPS請求

    目錄 1、簡介 2、安裝和設(shè)置 3、捕獲HTTP/HTTPS請求 4、修改HTTP/HTTPS請求 5、斷點和日志記錄 6、過濾和排序請求 7、導(dǎo)出和導(dǎo)入數(shù)據(jù) 8、高級功能和技術(shù) 9、實際應(yīng)用 總結(jié) 在調(diào)試網(wǎng)絡(luò)應(yīng)用時,了解如何捕獲和修改HTTP/HTTPS請求是非常有用的。這些技巧對于識別和解決問題,以及測

    2024年02月08日
    瀏覽(22)
  • SpringBoot項目報錯:java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapp

    技術(shù)版本: SpringBoot2.04 錯誤場景描述: 項目可以正常啟動,但后臺接口一被請求就報下面這個錯誤: 原因分析: 1、Tomcat版本問題。 2、jar包沖突,具體是servlet-api這個jar包。 解決方案: 1、SringBoot項目使用的是內(nèi)置Tomcat,如果本地的pom文件中引入了servlet-api依賴,刪掉這個

    2024年02月12日
    瀏覽(27)
  • .NET Core(C#)使用Titanium.Web.Proxy實現(xiàn)Http(s)代理服務(wù)器監(jiān)控HTTP請求

    關(guān)于Titanium.Web.Proxy詳細(xì)信息可以去這里仔細(xì)看看,這里只記錄簡單用法 NuGet直接獲取Titanium.Web.Proxy 配置 與其說是配置,不如就說這一部分就是未來你需要使用的部分,想知道具體每個部分是干什么的就去看原文鏈接 全放過來太占地方 最后的 Console.Read(); 是一個等待函數(shù),你

    2024年02月09日
    瀏覽(24)
  • Servlet API中使用Request對象獲取HTTP協(xié)議請求內(nèi)容

    Servlet API中使用Request對象獲取HTTP協(xié)議請求內(nèi)容

    在Servlet API中,定義了一個HttpServletRequest接口,它繼承自ServletRequest接口,專門 用來封裝HTTP請求消息。 由于HTTP請求消息分為請求行、請求頭和請求體三部分,因此,在HttpServletRequest接口中定義了獲取請求行、請求頭和請求消息體的相關(guān)方法. Web服務(wù)器【tomcat】收到客戶端的

    2024年02月11日
    瀏覽(19)
  • Java Web 項目入門指南(http、Servlet、Request、Response、ServletContext、會話技術(shù)[cookie、session]、Filter、Listener)

    Java Web 項目入門指南(http、Servlet、Request、Response、ServletContext、會話技術(shù)[cookie、session]、Filter、Listener)

    web 服務(wù)器 :可以被瀏覽器訪問到的服務(wù)器 常見的 web 服務(wù)器: tomcat:中小型的服務(wù)器軟件,免費開源,支持 JSP 和 Servlet apache 公司的產(chǎn)品 WebLogic:Oracle 公司的產(chǎn)品,是目前應(yīng)用最廣泛的 Web 服務(wù)器,支持 J2EE 規(guī)范。WebLogic 是用于開發(fā)、集成、部署和管理大型分布式 Web 應(yīng)用

    2024年02月02日
    瀏覽(72)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包