第一个SpringBoot插件-捕获请求并且支持重新发起

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.location.href);
   this.baseUrl = urlMatches[1] + '/';        
  • 编写完成基本代码以后要考虑如何将其打成jar包给其他工程直接调用,因为用的是SpringBoot的工程,所以说需要将打包的插件更改为maven的打包插件,如下,然后运行maven install命令就可以将其打成一个可以被别的项目引入的jar.
    
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8 
                    1.8
                
            
        
  • 打成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到私有库

  • 在配置文件中配置发布信息
    
        
        
            
            nexus-releases
            
            Release repository
            http://192.168.1.241:8088/repository/maven-releases/
        
        
        
            nexus-snapshots
            Snapshots repository
            http://192.168.1.241:8088/repository/maven-snapshots/
        
    
  • 然后运行 clean deploy

界面演示

代码

  • github

你可能感兴趣的:(第一个SpringBoot插件-捕获请求并且支持重新发起)