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

    界面演示

    • 演示

    代码

  • 相关阅读:
    论工作动力的来源是什么?答案是来自于实现自己的梦想
    向梦想者致敬
    内置函数,递归函数,模块与包,开发目录规范
    迭代器,生成器
    闭包函数,装饰器,语法糖
    函数对象,名称空间及查找,作用域
    函数调用与参数
    字符编码
    文件处理
    python 11.5数据类型及常用方法
  • 原文地址:https://www.cnblogs.com/liyuhui-Z/p/11732280.html
Copyright © 2020-2023  润新知