第一個SpringBoot插件-捕獲請求而且支持從新發起

SpringBoot 插件入門

簡介

  • 公司用的是SpringBoot,api框架用的是swagger-ui,確實用的不錯,可是在使用過程當中發現一個問題,就是當前端正式調用的時候,若是參數一多的話模擬請求比較麻煩,或者swagger-ui沒法模擬出前端的完整請求參數,好比參數放到header裏面的,就萌生了一個想法,能夠不能夠本身寫一個相似swagger-ui的插件,經過捕捉訪問進來的請求,將其header和param保存下來,下次若是出現問題的話能夠經過相同的header和param來再次進行請求.

思考過程

  • 即經過filter捕獲指定路徑內的請求,而後將其params和headers存放到一個map中,暫時尚未保存數據庫,最大容量爲100,提供了一個簡單的前端頁面來進行內容的頁面化,頁面上能夠選擇直接用相同的參數發起請求,同時還支持更改其中的參數來發起請求,請求是經過前臺頁面直接發起.html

  • 這個邏輯其實蠻簡單的,難點在於如何將一個springboot打成jar包供其餘項目引用,如何把頁面集成到springBoot中,是否須要進行其餘的配置,如何將其餘包內的Bean引入到主項目中.前端

  • 最後仍是去參考了一下swagger-ui的源碼,Swagger-UI源碼java

開發過程

  • 首先編寫基本的代碼,即Filter,數據的保存類,以及對應的前臺UI,編寫UI的時候有一個難點,就是如何獲取到當前項目的地址,最後用下面的代碼解決:
var urlMatches = /(.*)\/reqCatch.html.*/.exec(window.location.href);
   this.baseUrl = urlMatches[1] + '/';
  • 編寫完成基本代碼之後要考慮如何將其打成jar包給其餘工程直接調用,由於用的是SpringBoot的工程,因此說須要將打包的插件更改成maven的打包插件,以下,而後運行maven install命令就能夠將其打成一個能夠被別的項目引入的jar.
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source> 
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
  • 打成jar之後首先要看一下前端頁面是否能夠訪問到,靜態資源html等發到static下面,打成jar之後仍是直接能夠經過原先的網址訪問的,不會衝突,到這一步則能夠引入jar,能夠訪問到前臺頁面,只須要將其Bean添加到主項目中,而後編寫一下指定的配置類便可.git

  • 如何將bean引入到主項目的Spring環境中,此處是借鑑Swagger-UI的用法,首先編寫一個註解,而且運用Import引入一個配置類,而後在配置類上經過@ComponentScan((basePackages= {"com.xx","com.xx"})),直接在主類的配置文件編寫這個註解就能夠引入對應的Spring環境中
// 註解類
        @Retention(RetentionPolicy.RUNTIME)
        @Target({java.lang.annotation.ElementType.TYPE})
        @Documented
        @Import({CatchReqConfiguration.class})   // 將這個類交給Spring管理
        public @interface CatchReq {

        }

        // 配置類
        @Configuration
        @ComponentScan(basePackages= {"com.req.controller","com.req.filter"})  // 掃描包
        public class CatchReqConfiguration {
        }
  • 這樣就能夠將jar包內指定路徑的Bean交給Spring管理.github

  • 下一步就是編寫改插件的配置文件,通俗點就是註冊一個Filter,將下面的配置方法放到主項目中,便可以開啓插件效果,到此,一個很是簡單的Spring Boot的插件就算開發完成.
@Configuration
    @CatchReq
    public class CatchFilterDemo {
        @Bean
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public FilterRegistrationBean timerFilter() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new CatrhReqFilter());
            filterRegistrationBean.addUrlPatterns("/*");
            return filterRegistrationBean;
        }
    }

發佈該jar到私有庫

  • 在配置文件中配置發佈信息
<distributionManagement>
        <!--正式版本 -->
        <repository>
            <!-- nexus服務器中用戶名:在settings.xml中<server>的id -->
            <id>nexus-releases</id>
            <!-- 這個名稱本身定義 -->
            <name>Release repository</name>
            <url>http://192.168.1.241:8088/repository/maven-releases/</url>
        </repository>
        <!--快照 -->
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Snapshots repository</name>
            <url>http://192.168.1.241:8088/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
  • 而後運行 clean deploy

界面演示

  • 演示

代碼

相關文章
相關標籤/搜索