自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

月月鸟先森的博客

譬如朝露,去日苦多。

  • 博客(103)
  • 资源 (16)
  • 收藏
  • 关注

原创 SpringBoot手动取消接口执行方案

实际开发中经常会遇到比较耗时的接口操作,但页面强制刷新或主动取消接口调用后后台还是会继续运行,特别是有大量数据库操作时会增加服务器压力,所以进行研究测试后总结了一套主动取消接口调用的解决方案。

2024-03-26 15:38:35 169 1

原创 Windows安装多个Tomcat部署项目

在实际生产环境中,经常会有一个tomcat部署多个应用程序的场景,但多个项目应用同一个基础框架时,会出现某些文件路径相同的情况导致管理混乱(例如附件,日志,缓存文件),并且更新有时需要关闭tomcat导致多个项目同时失效,本文提供同时安装多个tomcat的方案,独立部署每个项目便于管理。

2024-01-05 10:38:06 460

原创 从零开发基于ASM字节码的Java代码混淆插件XHood

因在公司负责基础框架的开发设计,所以针对框架源代码的保护工作比较重视,之前也加入了一系列保护措施例如自定义classloader加密保护,授权license保护等,但都是防君子不防小人,安全等级还比较低经过调研各类加密混淆措施后,决定自研混淆插件,自主可控,能够贴合实际情况进行定制化,达到框架升级后使用零感知,零影响。

2023-11-02 08:51:32 133

原创 SpringBoot集成微信支付JSAPIV3保姆教程

最近为一个公众号h5商城接入了微信支付功能,查找资料过程中踩了很多坑,以此文章记录一下和大家分享。

2023-09-11 16:37:23 546

原创 如何搭建虚拟专有网络访问公司内网

因为公司开发都是内网环境,以往居家办公或非公司环境,都需要进行远程到公司电脑进行办公,为了方便部门同事出差驻场开发,搭建了虚拟专有网络在实际搭建过程中使用了OpenVPN和SoftEtherVPN两种方式,做个总结记录,个人还是更推荐SoftEtherVPN,有可视化界面,配置简单以下操作中指的是拥有外网ip及端口的公司服务器,指个人的办公电脑。

2023-09-02 15:04:09 1371

原创 SpringBoot开发符合S3协议的文件存储服务

s3协议无标准说明文档,为rest风格,创建/删除/详情方法通过PUT/DELETE/HEAD表述很多方法共用一个路由,通过head参数区分(例如putObject和copyObject)参考aws的最新api文档:https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html实现以下基础功能Bucket创建Bucket删除文件上传文件删除文件下载文件分片操作(初始化/分片上传/合并)

2023-07-23 13:54:35 627

原创 基于嵌入式Tomcat的War包启动器

最近针对java项目的部署方式进行整理,jenkins/tomcat/windows工具/linux脚本/web部署平台等等发现war包通过tomcat部署比较繁琐,等待时间长,配置规则复杂对于小白很不友好,也难以接入到自定义的部署工具/平台中之前开发的Jar包部署平台是servlet开发通过嵌入式tomcat部署,借此打开思路能否基于嵌入式tomcat做一个war包启动器,通过代码的方式开启tomcat容器来部署war包。

2023-07-02 17:45:15 769

原创 Java实现AWS S3 V4 Authorization自定义验证

最近在开发文件存储服务,需要符合s3的协议标准,可以直接接入aws-sdk,本文针对sdk发出请求的鉴权信息进行重新组合再签名验证有效性,sdk版本如下

2023-06-04 16:40:03 1358

原创 从零构建可视化jar包部署平台JarManage

支持在线创建项目,上传Jar包,自动备份,配置启动参数,注册系统服务,查看启动日志等功能,具有以下优点基于servlet开发,依赖简洁,部署包10MB左右结合嵌入式tomcat一键部署,无外部容器依赖使用h2db存储数据,无外部数据库依赖适配windows/linux平台,满足多种环境具体项目经平台部署后自动注册系统服务,无需担心服务器重启系统架构图如下系统截图展示。

2023-04-01 17:52:33 1075 1

原创 SpringBoot集成SpringBootAdmin实现监控

springboot开启actuator集成spring-boot-admin实现服务可视化监控

2023-03-25 17:33:55 353

原创 基于jsplumb构建的流程设计器

流程设计器中最基础的两个元素为活动(节点)和变迁(连接),我们需要以下基础功能来配合相关接口进行工作流相关设计数据的保存/修改活动的添加/删除/移动变迁的添加/删除活动/变迁数据的全部读取根据json渲染活动与变迁相关引入依赖如下表所示名称功能jsplumb.js设计器主要依赖,用于绘制相关图形与动态操作实现jquery.jsjsplumb依赖的库jsplumb依赖的库,进行拖拽绑定实现右击菜单模板引擎渲染活动,避免字符串拼接。

2023-02-19 18:33:55 813

原创 SpringBoot访问windows共享文件

最近有项目需要开发档案打包下载功能,其中包含很多大附件,项目使用minio存储且不在同一台服务器上,为了优化速度决定使用windows共享功能进行文件传输。

2023-02-05 15:45:50 857

原创 SpringBoot动态更新yml文件

在系统运行过程中,可能由于一些配置项的简单变动需要重新打包启停项目,这对于在运行中的项目会造成数据丢失,客户操作无响应等情况发生,针对这类情况对开发框架进行升级提供yml文件实时修改更新功能。

2022-12-31 19:29:41 4246 9

原创 fastjson全局日期序列化设置导致JSONField无效

fastjson通过代码指定全局序列化返回时间格式,导致使用JSONField注解标注属性的特殊日期返回格式失效。

2022-12-17 13:38:03 540 1

原创 SpringBoot集成数据传输加密

近期在对开发框架安全策略方面进行升级优化,提供一些通用场景的解决方案,本文针对前后端数据传输加密进行简单的分享,处理流程设计如下图所示,本加密方法对原有项目兼容性较好,只需要更换封装好的加密Ajax请求方法,后端统一拦截判断是否需要解密即可生成的DES加密密钥一定是8的整数倍的位数生成RSA密钥对RSA密钥对有很多种格式,因为需要和前端算法库互联互通,这里选择的是1024位,Padding方式为PKSC1前端DES加密引入crypto.js第三方库前端RSA加密引入jsencrypt,js第三方

2022-12-04 14:50:43 1288

原创 web系统添加盲水印

为增加系统安全性,避免重要敏感信息通过截图方式泄露,对web页面增加盲水印标识,标注系统名称,登陆人,当前时间等信息,这里的盲水印指肉眼不可见的html水印。

2022-11-26 17:13:04 964

原创 SpringBoot集成onlyoffice实现word文档编辑保存

onlyoffice为一款开源的office在线编辑组件,提供word/excel/ppt编辑保存操作。

2022-09-25 11:50:48 6511 13

原创 SpringBoot集成ffmpeg实现视频转码播放

之前构建过文件预览服务,对于视频部分前端播放组件限制只能为mp4格式,为了支持更多视频格式决定对方案进行升级,由于视频格式较多,针对每一种格式定制选择播放器不太现实,决定对视频源统一转码,转码后的格式为mp4,兼容性稳定且前后端改造工作较小。

2022-09-18 14:45:58 4314 1

原创 linux部署jar包脚本和注册开机启动

之前开发了windows部署jar包为服务的工具在实际生产环境中使用非常简单方便,公司部分项目是部署在linux系统中的,所以决定整合一个通用的jar包部署脚本,并注册为开机启动服务,为开发实施的同事提供方便,以下操作实际系统环境为centos8。...

2022-08-13 12:52:27 2656

原创 部署jar包windows服务工具

工具包含【服务名称】【jar包路径】【部署端口】【执行结果】【操作按钮】五个部分服务名称对应的就是安装后windows服务的名字jar包路径部署项目的jar文件物理路径部署端口默认为空不指定使用配置文件中端口,指定后使用自定义端口执行结果显示安装/卸载/启动/关闭服务适输出的操作日志操作按钮在进行服务操作前必须将所有配置确定输入后点击保存配置按钮安装/卸载/启动/停止四个按钮对应相关windows服务的操作服务安装后默认停止状态,需要手动启动,服务启动方式为自动。...

2022-08-06 22:47:38 1973 3

原创 knife4j通过js动态刷新全局参数

之前在为框架集成knife4j接口调试查看工具,使用了一段时间,使用体验上比较繁琐,因为接口都需要token,所以每次都要去f12查看token复制再创建全局参数,可能我只需要测试一个接口但是步骤少不了,针对此问题框架做了一些优化。...

2022-07-16 15:25:11 1034

原创 SpringBoot实现自定义路由覆盖

公司最近有一个项目二期需要对一些功能进行改造,涉及部分框架内置业务接口个性化定制,兼容老接口功能并且增加一部分新的数据返回,由于前端调用这些接口分布较多且较为零碎,修改测试成本较大,所以打算在框架层面提供路由覆盖功能,加快项目进度减少无技术含量的修改带来的系统风险...

2022-07-16 14:47:53 756 1

原创 SpringBoot整合atomikos实现跨库事务

框架之前完成了多数据源的动态切换及事务的处理,想更近一步提供一个简单的跨库事务处理功能,经过网上的搜索调研,大致有XA事务/SEGA事务/TCC事务等方案,因为业务主要涉及政府及企业且并发量不大,所以采用XA事务,虽然性能有所损失,但是可以保证数据的强一致性针对注册的数据源拷贝一份用于XA事务,使得本地事务和XA全局事务相互独立可选择的使用引入atomikos第三方组件注册XA数据源使用Druid连接池,需要使用DruidXADataSource数据源对象,再使用AtomikosDataSourceBe

2022-05-31 22:52:51 1580 1

原创 SpringBoot多数据源事务解决方案

背景之前有文章提供了springboot多数据源动态注册切换的整合方案,在后续使用过程中,发现在事务控制中有多种bug发生,决定对此问题进行分析与解决前情提要多数据源切换流程结构图如下所示,包含几个组成元素自定义的数据源配置处理,通过DruidDataSource对象动态注册到系统中自定义数据源标识注解与切面数据源切换时的上下文线程变量持有者自定义AbstractRoutingDataSource,实现数据源路由切换问题分析在Controller加入@Transiti

2022-05-01 14:06:37 6035 3

原创 SpringBoot集成mybatis拦截器修改表名

背景公司的框架是基于mysql5.7开发的,最近有一个应用项目部署在linux系统上,使用的是mysql8.0,安装时未开启大小写敏感忽略,客户又不允许重装mysql环境,导致一些框架代码和业务代码中表名使用大写的地方会出现表名找不不到的情况,所以需要进行统一处理自定义SQLAST适配器自定义ASTVisitorAdapter对表名进行修改public class MySqlExportTableAliasVisitor extends MySqlASTVisitorAdapter { @O

2022-05-01 14:03:22 3992

原创 SpringBoot集成消息队列

背景最近在对公司开发框架进行优化,框架内涉及到多处入库的日志记录,例如登录日志/操作日志/访问日志/业务执行日志,集成在业务代码中耦合度较高且占用业务操作执行时间,所以准备集成相关消息队列进行代码解耦方案规划现有的成熟消息队列组件非常多,例如RabbitMQ,ActiveMQ,Kafka等,考虑到业务并发量不高且框架已经应用于多个项目平稳运行,准备提供基于Redis的消息队列和集成ActiveMQ两种方案,Redis消息队列的好处是无需额外安装部署存量项目可平稳过度但消息无法持久化可能丢失,Activ

2022-04-23 14:24:18 2504 2

原创 SpringBoot集成knife4j

前言项目api编写有文档但是调试麻烦,需要借助postman/apipost等第三方工具,需要在开发框架中内置接口管理及调试功能增加开发便捷性pom配置说明,框架使用springboot版本为2.0.0.RELEASE <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-sta

2022-04-17 16:05:42 2232

原创 SpringBoot异步任务获取HttpServletRequest

前言在使用框架日常开发中需要在controller中进行一些异步操作减少请求时间,但是发现在使用@Anysc注解后会出现Request对象无法获取的情况,本文就此情况给出完整的解决方案原因分析@Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null在使用springboot的自定带的线程共享后,代码如下,Request不为null,但是偶发的其中body/head/urlparam内容出现获取不到的情况,是因为异步任务在未执行完毕的情况下,主线程已经返回,拷

2022-04-09 15:47:58 4706 12

原创 SpringBoot自定义classloader加密保护class文件

背景最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密再通过自定义的classloder进行解密加载,此方案并不是绝对安全,只是加大反编译的困难程度,防君子不防小人,整体加密保护流程图如下图所示maven插件加密使用自定义maven插件对编译后指定的class文件进行加密,加密后的class文件拷贝到指定路径,这里是保存到resource/coreclass

2022-02-19 18:26:52 3263 13

原创 SpringBoot自定义maven-plugin插件整合asm代码插桩

背景公司开发框架增加了web系统license授权证书校验模块,实行一台机器一个授权证书,初步方案是增加拦截器针对全局请求进行拦截校验,评估后认为校验方式单一,应该增加重要工具类,业务service实现中每个方法的进行校验,因为涉及代码量较大硬编码工作困难,故选择通过自定义maven插件在编译期间进行动态代码插桩操作项目配置新建maven项目设置打包方式<packaging>maven-plugin</packaging>增加依赖项 <!--使用doc的方式-

2022-02-19 18:25:47 984

原创 SpringBoot在Tomcat部署war包

启动类配置继承SpringBootServletInitializer@SpringBootApplicationpublic class TestApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Override

2022-01-16 17:02:48 1829

原创 SpringBoot整合达梦数据库

安装配置软件安装下载地址:https://www.dameng.com/view_61.html本文以x86 win64 DM8为例安装完毕后打开DM数据库配置助手创建数据库,设置字符集utf8,去除字符大小写敏感创建表空间及用户,最好是一个库对应一个用户一个表空间,创建用户时需要指定对应表空间需要对用户分配DBA操作权限数据表迁移针对现有项目或框架库需要同步迁移到达梦数据库,本文以mysql5.7为例,打开DM数据迁移工具,注意保持对象名大小写,选择表时全部取出再全选,迁移的表名

2022-01-08 15:52:43 4514 3

原创 SpringBoot整合Ehcache3

前言公司部门老项目要迁移升级java版本,需要进行缓存相关操作,原框架未支持这部分,经过调研java相关缓存方案大致分为ehcache和redis两种,redis的value最大值为500mb且超过1mb会对存取有性能影响,业务系统需要支持列表查询缓存就不可避免的涉及到大量的数据存取过滤,ehcache支持内存+磁盘缓存不用担心缓存容量问题,所以框架初步版本决定集成ehcache3,设计流程结构如下图所示缓存配置maven引用 <dependency>

2022-01-03 15:20:54 4063 3

原创 SpringBoot文件分片上传

背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上传大文件过程中进行优化实时展现进度条,进行技术评估后针对框架文件上传进行扩展升级,扩展接口支持大文件分片上传处理,减少服务器瞬时的内存压力,同一个文件上传失败后可以从成功上传分片位置进行断点续传,文件上传成功后再次上传无需等待达到秒传的效果,优化用户交互体验,具体的实现流程如下图所示文件MD5计算对于文件md5的计算我们使用spark-md5第三方库,大文件我们

2021-12-26 19:11:09 6673 4

原创 bat脚本一键配置java开发环境

背景在新电脑配置或者新人入职时需要对java开发相关环境进行配置安装,但时常会因为安装配置不到位或者操作错误导致时间的浪费,所以在空余时间收集了一系列软件的免安装版本,并且编写了相关配置脚本,让环境安装变得标准化。概览安装包目录如下如所示BaseEnv包含jdk(1.8),maven(3.2.5)ProgramEnv包含idea(2019.2)SoftEnv包含mysql(5.7),navicat(15),redis,redismanage(1.5.8)remark为安装总说明settin

2021-12-19 21:04:06 1733

原创 SpringBoot-Web应用安全策略实现

背景近期项目上线,甲方要求通过安全检测才能进行验收,故针对扫描结果对系统进行了一系列的安全加固,本文对一些常见的安全问题及防护策略进行介绍,提供对应的解决方案跨站脚本攻击XSS常发生于论坛评论等系统,现在富文本编辑器已对XSS进行了防护,但是我们任需要在后端接口进行数据过滤,常见防护策略是通过过滤器将恶意提交的脚本进行过滤与替换public class XSSFilter implements Filter { @Override public void init(FilterCo

2021-12-04 20:04:27 788

原创 SpringBoot访问jar包静态文件

背景项目开发过程中我们我们会遇到访问静态文件的情况,例如word书签模板,excel导入模板,条文法规文件等,在war包的情况下访问是没有问题的,如果使用jar包部署,使用相对路径访问会出现问题,本文就此问题给出解决方案。配置resources文件夹下创建静态目录systemfile,放入测试文件test.docx(文件名需要命名为英文)pom文件resource/build节点设置打包编译忽略systemfile文件夹 <resources>

2021-11-27 14:24:38 1877

原创 SpringBoot整合Minio文件存储

背景公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型后决定框架整合minio,将minio部署在另一台服务器开通外网端口即可解决问题Minio安装部署下载minio安装部署包,创建对应配置文件,这里提供一个整合后的压缩包下载地址:https://download.csdn.net/download/u013407099/45602196创建minioData文件夹作为文件存储路径,解压安装包根据放置路径修改对应

2021-11-20 15:38:33 3576

原创 SpringBoot多环境配置文件打包

背景在使用springboot开发项目过程中,会有多种环境切换,例如开发环境,测试环境,演示环境,生产环境等,我们通过建立多个yml文件结合profiles.active属性进行环境指定,但是需要打包时就要手动更改配置文件逐个打包,容易造成不必要的误操作,本文就介绍如何进行不同环境配置文件的动态切换及一次性打包多个不同环境的部署包配置pom文件pom文件添加profiles配置,项目有多少个配置文件,添加多少个子节点,profiles标签于parent标签同级,这样我们就可以在右侧maven的配置项中

2021-11-20 15:37:05 2044

原创 SpringBoot实现文件在线预览

背景最近公司内部oa系统升级,需要增加文件在线预览服务,最常见的文件就是office文档,一开始构思几个方案,比如office软件自带的文件转换,openoffice转换,offce365服务,aspose组件转换,最终采用了aspose转换,原因是组件功能完善,不依赖其它软件安装环境系统设计文件类型及方案文件类型预览方案wordaspsoe-word转换图片预览(版本21.1)pptaspose-slides转化你图片预览(版本20.4)excelaspose

2021-10-16 17:16:40 1572 1

windows服务安装卸载可视化工具

可视化小工具安装卸载windows服务,需要以管理员权限打开

2021-11-20

Minio集成服务部署安装包

整合后的minio安装包,可以直接安装为winows服务启动,请修改相关配置文件路径及对应文件夹

2021-11-20

linux相关软件.rar

jdk-1.8 mysql-5.7.32 maven-3.8.1 redis-6.2.5 jekins-2.174 xshell,editplis,eftp

2021-08-08

Aspose相关dll引用.rar

Aspose相关Word,Excel,PPT,PDF第三方组件

2021-05-04

Aspose.Word域套打示例

c#使用Aspose.Word实现域讨打功能,可用于调查表,营业执照,介绍信等模板文件的打印生成,详情可见我的博客

2020-11-01

springboot多数据源注册与切换

基于springboot的多数据源注册,切换,切面拦截功能,无需手动声明DataSource直接读取配置文件,可以向业务层面灵活扩展

2020-09-20

ASPNetMVC模块化开发.rar

ASP.NET MVC模块化开发——动态挂载外部项目,包含Controller识别,cshtml加载,依赖注入,动态更新等方面

2019-08-06

Gpg4win3.1.5安装包

用于maven项目打包的密钥生成工具,3.1.5版本,windows使用

2019-01-05

微信小程序多条搜索效果

多Tab形式展现搜索项,采用下拉多方框多选的交互模式,更多Tab搜索栏以卡片的形式加载所有分类,最后以标签形式汇总

2018-12-15

springboot实现web系统Licence验证

教程请见https://blog.csdn.net/Lammonpeter/article/details/78602862

2018-08-07

C#树型结构分类统计表格一般性解决方案

C#树型结构分类统计表格一般性解决方案,详情请见我的博客文章,会有详细的思路介绍

2018-05-21

aspose.word

word转pdf的第三方aspose组件,可以用于word文档转换为pdf形式的文件,简单好用

2018-04-14

selenium的dll文件与phantomjs.

其中包括selenium最新的dll文件与phantomjs的exe文件

2016-11-19

RSA和DES加密

CA加密与DES加密结合

2016-10-03

seleunim的jar包与chromdriver驱动

seleunim的jar包与chromdriver驱动

2016-05-16

仿微米网Android客户端

高仿仿微米网Android客户端,界面精美,值得下载

2016-02-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除