第一個SpringBoot插件-捕獲請求並且支援重新發起

  • 2019 年 10 月 25 日
  • 筆記

SpringBoot 插件入門

簡介

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

思考過程

  • 即通過filter捕獲指定路徑內的請求,然後將其params和headers存放到一個map中,暫時還沒有保存資料庫,最大容量為100,提供了一個簡單的前端頁面來進行內容的頁面化,頁面上可以選擇直接用相同的參數發起請求,同時還支援更改其中的參數來發起請求,請求是通過前台頁面直接發起.
  • 這個邏輯其實蠻簡單的,難點在於如何將一個springboot打成jar包供其他項目引用,如何把頁面集成到springBoot中,是否需要進行其他的配置,如何將其他包內的Bean引入到主項目中.
  • 最後還是去參考了一下swagger-ui的源碼,Swagger-UI源碼

開發過程

  • 首先編寫基本的程式碼,即Filter,數據的保存類,以及對應的前台UI,編寫UI的時候有一個難點,就是如何獲取到當前項目的地址,最後用下面的程式碼解決:
   var urlMatches = /(.*)/reqCatch.html.*/.exec(window.kk);     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添加到主項目中,然後編寫一下指定的配置類即可.
  • 如何將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管理.
  • 下一步就是編寫改插件的配置文件,通俗點就是註冊一個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

介面演示

程式碼