第一个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
界面演示
代码
第一个SpringBoot插件-捕获请求并且支持重新发起的更多相关文章
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- SpringBoot多跨域请求的支持(JSONP)
在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBod ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
{Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) Django基础七之 ...
- 第一个SpringBoot程序
第一个SpringBoot程序 例子来自慕课网廖师兄的免费课程 2小时学会SpringBoot Spring Boot进阶之Web进阶 使用IDEA新建工程,选择Spring Initializr,勾 ...
- 整理代码,将一些曾经用过的功能整合进一个spring-boot
一 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 功能 1. ...
- springboot学习笔记:2.搭建你的第一个springboot应用
1.开发环境 (推荐):jdk1.8+Maven(3.2+)+Intellij IDEA+windows10; 说明: jdk:springboot官方说的很明确,到目前版本的springboot(1 ...
- 分享一个springboot脚手架
项目介绍 在我们开发项目的时候各个项目之间总有一些可共用的代码或者配置,如果我们每新建一个项目就把代码复制粘贴再修改就显得很没有必要.于是我就做了一个 poseidon-boot-starter 该项 ...
- Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)
前言 我们知道在Web APi中捕获原始请求的内容是肯定是很容易的,但是这句话并不是完全正确,前面我们是不是讨论过,在Web APi中,如果对于字符串发出非Get请求我们则会出错,为何?因为Web A ...
- springboot:快速构建一个springboot项目
前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...
随机推荐
- windows系统下jupyter notebook使用虚拟环境
目录 [亲测好使]windows系统下jupyter notebook使用虚拟环境 在虚拟环境中安装jupyter,并添加到jupyter kernel 参考 [未测试,但觉得比上面那方法好,因为上面 ...
- Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...
- cdq分治(偏序)
偏序问题: https://www.luogu.org/blog/Owencodeisking/post-xue-xi-bi-ji-cdq-fen-zhi-hu-zheng-ti-er-fen 优质题 ...
- 从虚拟机视角谈 Java 应用性能优化
从虚拟机视角谈 Java 应用性能优化 周 祥, 软件工程师, IBM 简介:Java 的普及和广泛应用,以及其基于虚拟机运行的机制,使得性能问题越来越重要.本文从 Java 虚拟机的角度,特别是垃圾 ...
- 莫烦PyTorch学习笔记(五)——分类
import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ...
- JeePlus-Note:笔记1
ylbtech-JeePlus-Note:笔记1 1.返回顶部 1. 1.JeePlus/代码生成器http://localhost:8081/a/login 2.manager/Java基础框架ht ...
- Sharepoint常见概念
有待补充: 1.环境部署(AD+DNS+SQL+SharePoint前端): SharePoint基本都是这样的结构,可以在多台服务器中,也就是场,当然也可以在一台服务器上.说说这几部分的功能 (1) ...
- 使用Colaboratory的免费GPU训练神经网络
1 Colaboratory 介绍 Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果.它是一个 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并 ...
- NoSQL 列族数据库
- 初学C#的简单编程题合集(更新)
一 编写一个控制台应用程序,要求完成下列功能. 1) 接收一个整数 n. 2) 如果接收的值 n 为正数,输出 1 到 n 间的全部整数. 3) 如果接收的值为负值,用 break 或者 ...
