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

2019-10-25 07:09:17来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

第一个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.
    <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

界面演示

  • 演示

代码

  • github

原文链接:https://www.cnblogs.com/liyuhui-Z/p/11732280.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:spring boot 2.x文件路径映射问题汇总

下一篇:java-day12