![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 65
springboot相关
code2roc
当你老了,回顾一生,就会发觉:什么时候出国读书、什么时候决定做第一份职业、何时选定了对象而恋爱、什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯,你作出抉择的那一日,在日记上,相当沉闷和平凡,当时还以为是生命中普通的一天。
展开
-
SpringBoot配置HTTPS及开发调试
在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享。原创 2024-04-29 15:21:52 · 649 阅读 · 2 评论 -
SpringBoot手动取消接口执行方案
实际开发中经常会遇到比较耗时的接口操作,但页面强制刷新或主动取消接口调用后后台还是会继续运行,特别是有大量数据库操作时会增加服务器压力,所以进行研究测试后总结了一套主动取消接口调用的解决方案。原创 2024-03-26 15:38:35 · 240 阅读 · 1 评论 -
Windows安装多个Tomcat部署项目
在实际生产环境中,经常会有一个tomcat部署多个应用程序的场景,但多个项目应用同一个基础框架时,会出现某些文件路径相同的情况导致管理混乱(例如附件,日志,缓存文件),并且更新有时需要关闭tomcat导致多个项目同时失效,本文提供同时安装多个tomcat的方案,独立部署每个项目便于管理。原创 2024-01-05 10:38:06 · 533 阅读 · 0 评论 -
从零开发基于ASM字节码的Java代码混淆插件XHood
因在公司负责基础框架的开发设计,所以针对框架源代码的保护工作比较重视,之前也加入了一系列保护措施例如自定义classloader加密保护,授权license保护等,但都是防君子不防小人,安全等级还比较低经过调研各类加密混淆措施后,决定自研混淆插件,自主可控,能够贴合实际情况进行定制化,达到框架升级后使用零感知,零影响。原创 2023-11-02 08:51:32 · 161 阅读 · 0 评论 -
SpringBoot集成微信支付JSAPIV3保姆教程
最近为一个公众号h5商城接入了微信支付功能,查找资料过程中踩了很多坑,以此文章记录一下和大家分享。原创 2023-09-11 16:37:23 · 631 阅读 · 0 评论 -
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 · 692 阅读 · 0 评论 -
基于嵌入式Tomcat的War包启动器
最近针对java项目的部署方式进行整理,jenkins/tomcat/windows工具/linux脚本/web部署平台等等发现war包通过tomcat部署比较繁琐,等待时间长,配置规则复杂对于小白很不友好,也难以接入到自定义的部署工具/平台中之前开发的Jar包部署平台是servlet开发通过嵌入式tomcat部署,借此打开思路能否基于嵌入式tomcat做一个war包启动器,通过代码的方式开启tomcat容器来部署war包。原创 2023-07-02 17:45:15 · 819 阅读 · 0 评论 -
Java实现AWS S3 V4 Authorization自定义验证
最近在开发文件存储服务,需要符合s3的协议标准,可以直接接入aws-sdk,本文针对sdk发出请求的鉴权信息进行重新组合再签名验证有效性,sdk版本如下原创 2023-06-04 16:40:03 · 1546 阅读 · 0 评论 -
从零构建可视化jar包部署平台JarManage
支持在线创建项目,上传Jar包,自动备份,配置启动参数,注册系统服务,查看启动日志等功能,具有以下优点基于servlet开发,依赖简洁,部署包10MB左右结合嵌入式tomcat一键部署,无外部容器依赖使用h2db存储数据,无外部数据库依赖适配windows/linux平台,满足多种环境具体项目经平台部署后自动注册系统服务,无需担心服务器重启系统架构图如下系统截图展示。原创 2023-04-01 17:52:33 · 1099 阅读 · 1 评论 -
SpringBoot集成SpringBootAdmin实现监控
springboot开启actuator集成spring-boot-admin实现服务可视化监控原创 2023-03-25 17:33:55 · 360 阅读 · 0 评论 -
SpringBoot访问windows共享文件
最近有项目需要开发档案打包下载功能,其中包含很多大附件,项目使用minio存储且不在同一台服务器上,为了优化速度决定使用windows共享功能进行文件传输。原创 2023-02-05 15:45:50 · 929 阅读 · 0 评论 -
SpringBoot动态更新yml文件
在系统运行过程中,可能由于一些配置项的简单变动需要重新打包启停项目,这对于在运行中的项目会造成数据丢失,客户操作无响应等情况发生,针对这类情况对开发框架进行升级提供yml文件实时修改更新功能。原创 2022-12-31 19:29:41 · 4334 阅读 · 9 评论 -
fastjson全局日期序列化设置导致JSONField无效
fastjson通过代码指定全局序列化返回时间格式,导致使用JSONField注解标注属性的特殊日期返回格式失效。原创 2022-12-17 13:38:03 · 568 阅读 · 1 评论 -
SpringBoot集成数据传输加密
近期在对开发框架安全策略方面进行升级优化,提供一些通用场景的解决方案,本文针对前后端数据传输加密进行简单的分享,处理流程设计如下图所示,本加密方法对原有项目兼容性较好,只需要更换封装好的加密Ajax请求方法,后端统一拦截判断是否需要解密即可生成的DES加密密钥一定是8的整数倍的位数生成RSA密钥对RSA密钥对有很多种格式,因为需要和前端算法库互联互通,这里选择的是1024位,Padding方式为PKSC1前端DES加密引入crypto.js第三方库前端RSA加密引入jsencrypt,js第三方原创 2022-12-04 14:50:43 · 1330 阅读 · 0 评论 -
SpringBoot集成onlyoffice实现word文档编辑保存
onlyoffice为一款开源的office在线编辑组件,提供word/excel/ppt编辑保存操作。原创 2022-09-25 11:50:48 · 6819 阅读 · 13 评论 -
SpringBoot集成ffmpeg实现视频转码播放
之前构建过文件预览服务,对于视频部分前端播放组件限制只能为mp4格式,为了支持更多视频格式决定对方案进行升级,由于视频格式较多,针对每一种格式定制选择播放器不太现实,决定对视频源统一转码,转码后的格式为mp4,兼容性稳定且前后端改造工作较小。原创 2022-09-18 14:45:58 · 4554 阅读 · 1 评论 -
linux部署jar包脚本和注册开机启动
之前开发了windows部署jar包为服务的工具在实际生产环境中使用非常简单方便,公司部分项目是部署在linux系统中的,所以决定整合一个通用的jar包部署脚本,并注册为开机启动服务,为开发实施的同事提供方便,以下操作实际系统环境为centos8。...原创 2022-08-13 12:52:27 · 2674 阅读 · 0 评论 -
部署jar包windows服务工具
工具包含【服务名称】【jar包路径】【部署端口】【执行结果】【操作按钮】五个部分服务名称对应的就是安装后windows服务的名字jar包路径部署项目的jar文件物理路径部署端口默认为空不指定使用配置文件中端口,指定后使用自定义端口执行结果显示安装/卸载/启动/关闭服务适输出的操作日志操作按钮在进行服务操作前必须将所有配置确定输入后点击保存配置按钮安装/卸载/启动/停止四个按钮对应相关windows服务的操作服务安装后默认停止状态,需要手动启动,服务启动方式为自动。...原创 2022-08-06 22:47:38 · 2030 阅读 · 3 评论 -
knife4j通过js动态刷新全局参数
之前在为框架集成knife4j接口调试查看工具,使用了一段时间,使用体验上比较繁琐,因为接口都需要token,所以每次都要去f12查看token复制再创建全局参数,可能我只需要测试一个接口但是步骤少不了,针对此问题框架做了一些优化。...原创 2022-07-16 15:25:11 · 1099 阅读 · 0 评论 -
SpringBoot整合atomikos实现跨库事务
框架之前完成了多数据源的动态切换及事务的处理,想更近一步提供一个简单的跨库事务处理功能,经过网上的搜索调研,大致有XA事务/SEGA事务/TCC事务等方案,因为业务主要涉及政府及企业且并发量不大,所以采用XA事务,虽然性能有所损失,但是可以保证数据的强一致性针对注册的数据源拷贝一份用于XA事务,使得本地事务和XA全局事务相互独立可选择的使用引入atomikos第三方组件注册XA数据源使用Druid连接池,需要使用DruidXADataSource数据源对象,再使用AtomikosDataSourceBe原创 2022-05-31 22:52:51 · 1647 阅读 · 1 评论 -
SpringBoot集成消息队列
背景最近在对公司开发框架进行优化,框架内涉及到多处入库的日志记录,例如登录日志/操作日志/访问日志/业务执行日志,集成在业务代码中耦合度较高且占用业务操作执行时间,所以准备集成相关消息队列进行代码解耦方案规划现有的成熟消息队列组件非常多,例如RabbitMQ,ActiveMQ,Kafka等,考虑到业务并发量不高且框架已经应用于多个项目平稳运行,准备提供基于Redis的消息队列和集成ActiveMQ两种方案,Redis消息队列的好处是无需额外安装部署存量项目可平稳过度但消息无法持久化可能丢失,Activ原创 2022-04-23 14:24:18 · 2521 阅读 · 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 · 2255 阅读 · 0 评论 -
SpringBoot异步任务获取HttpServletRequest
前言在使用框架日常开发中需要在controller中进行一些异步操作减少请求时间,但是发现在使用@Anysc注解后会出现Request对象无法获取的情况,本文就此情况给出完整的解决方案原因分析@Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null在使用springboot的自定带的线程共享后,代码如下,Request不为null,但是偶发的其中body/head/urlparam内容出现获取不到的情况,是因为异步任务在未执行完毕的情况下,主线程已经返回,拷原创 2022-04-09 15:47:58 · 4782 阅读 · 12 评论 -
SpringBoot自定义classloader加密保护class文件
背景最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密再通过自定义的classloder进行解密加载,此方案并不是绝对安全,只是加大反编译的困难程度,防君子不防小人,整体加密保护流程图如下图所示maven插件加密使用自定义maven插件对编译后指定的class文件进行加密,加密后的class文件拷贝到指定路径,这里是保存到resource/coreclass原创 2022-02-19 18:26:52 · 3432 阅读 · 13 评论 -
SpringBoot自定义maven-plugin插件整合asm代码插桩
背景公司开发框架增加了web系统license授权证书校验模块,实行一台机器一个授权证书,初步方案是增加拦截器针对全局请求进行拦截校验,评估后认为校验方式单一,应该增加重要工具类,业务service实现中每个方法的进行校验,因为涉及代码量较大硬编码工作困难,故选择通过自定义maven插件在编译期间进行动态代码插桩操作项目配置新建maven项目设置打包方式<packaging>maven-plugin</packaging>增加依赖项 <!--使用doc的方式-原创 2022-02-19 18:25:47 · 1012 阅读 · 0 评论 -
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 · 1836 阅读 · 0 评论 -
SpringBoot整合达梦数据库
安装配置软件安装下载地址:https://www.dameng.com/view_61.html本文以x86 win64 DM8为例安装完毕后打开DM数据库配置助手创建数据库,设置字符集utf8,去除字符大小写敏感创建表空间及用户,最好是一个库对应一个用户一个表空间,创建用户时需要指定对应表空间需要对用户分配DBA操作权限数据表迁移针对现有项目或框架库需要同步迁移到达梦数据库,本文以mysql5.7为例,打开DM数据迁移工具,注意保持对象名大小写,选择表时全部取出再全选,迁移的表名原创 2022-01-08 15:52:43 · 4630 阅读 · 3 评论 -
SpringBoot整合Ehcache3
前言公司部门老项目要迁移升级java版本,需要进行缓存相关操作,原框架未支持这部分,经过调研java相关缓存方案大致分为ehcache和redis两种,redis的value最大值为500mb且超过1mb会对存取有性能影响,业务系统需要支持列表查询缓存就不可避免的涉及到大量的数据存取过滤,ehcache支持内存+磁盘缓存不用担心缓存容量问题,所以框架初步版本决定集成ehcache3,设计流程结构如下图所示缓存配置maven引用 <dependency>原创 2022-01-03 15:20:54 · 4125 阅读 · 3 评论 -
SpringBoot文件分片上传
背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上传大文件过程中进行优化实时展现进度条,进行技术评估后针对框架文件上传进行扩展升级,扩展接口支持大文件分片上传处理,减少服务器瞬时的内存压力,同一个文件上传失败后可以从成功上传分片位置进行断点续传,文件上传成功后再次上传无需等待达到秒传的效果,优化用户交互体验,具体的实现流程如下图所示文件MD5计算对于文件md5的计算我们使用spark-md5第三方库,大文件我们原创 2021-12-26 19:11:09 · 6867 阅读 · 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 · 1796 阅读 · 0 评论 -
SpringBoot-Web应用安全策略实现
背景近期项目上线,甲方要求通过安全检测才能进行验收,故针对扫描结果对系统进行了一系列的安全加固,本文对一些常见的安全问题及防护策略进行介绍,提供对应的解决方案跨站脚本攻击XSS常发生于论坛评论等系统,现在富文本编辑器已对XSS进行了防护,但是我们任需要在后端接口进行数据过滤,常见防护策略是通过过滤器将恶意提交的脚本进行过滤与替换public class XSSFilter implements Filter { @Override public void init(FilterCo原创 2021-12-04 20:04:27 · 800 阅读 · 0 评论 -
SpringBoot访问jar包静态文件
背景项目开发过程中我们我们会遇到访问静态文件的情况,例如word书签模板,excel导入模板,条文法规文件等,在war包的情况下访问是没有问题的,如果使用jar包部署,使用相对路径访问会出现问题,本文就此问题给出解决方案。配置resources文件夹下创建静态目录systemfile,放入测试文件test.docx(文件名需要命名为英文)pom文件resource/build节点设置打包编译忽略systemfile文件夹 <resources>原创 2021-11-27 14:24:38 · 1909 阅读 · 0 评论 -
SpringBoot整合Minio文件存储
背景公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型后决定框架整合minio,将minio部署在另一台服务器开通外网端口即可解决问题Minio安装部署下载minio安装部署包,创建对应配置文件,这里提供一个整合后的压缩包下载地址:https://download.csdn.net/download/u013407099/45602196创建minioData文件夹作为文件存储路径,解压安装包根据放置路径修改对应原创 2021-11-20 15:38:33 · 3605 阅读 · 0 评论 -
SpringBoot多环境配置文件打包
背景在使用springboot开发项目过程中,会有多种环境切换,例如开发环境,测试环境,演示环境,生产环境等,我们通过建立多个yml文件结合profiles.active属性进行环境指定,但是需要打包时就要手动更改配置文件逐个打包,容易造成不必要的误操作,本文就介绍如何进行不同环境配置文件的动态切换及一次性打包多个不同环境的部署包配置pom文件pom文件添加profiles配置,项目有多少个配置文件,添加多少个子节点,profiles标签于parent标签同级,这样我们就可以在右侧maven的配置项中原创 2021-11-20 15:37:05 · 2076 阅读 · 0 评论 -
SpringBoot实现文件在线预览
背景最近公司内部oa系统升级,需要增加文件在线预览服务,最常见的文件就是office文档,一开始构思几个方案,比如office软件自带的文件转换,openoffice转换,offce365服务,aspose组件转换,最终采用了aspose转换,原因是组件功能完善,不依赖其它软件安装环境系统设计文件类型及方案文件类型预览方案wordaspsoe-word转换图片预览(版本21.1)pptaspose-slides转化你图片预览(版本20.4)excelaspose原创 2021-10-16 17:16:40 · 1621 阅读 · 1 评论 -
SpringBoot集成itextpdf动态生成pdf并展示
背景接上文SpringBoot集成markdown实现文档管理,对于表格的支持markdown不是特别友好,同时内部文档管理需要增加表格式api接口文档的功能,所以决定采用结合数据库存储与动态生成pdf借助目录结构展示的方式表结构设计目录表DROP TABLE IF EXISTS `knowledge_interfacecatalog`;CREATE TABLE `knowledge_interfacecatalog` ( `ID` int(11) NOT NULL AUTO_INCREMEN原创 2021-09-12 10:27:46 · 1480 阅读 · 0 评论 -
SpringBoot集成markdown实现文档管理
背景最近在做一个部门内部简单的知识库系统,便于新人入职了解与一些常见问题的解答,知识库的形式是以文档为主,为了快速实现文档功能,决定采用markdown形式录入,生成本地文件后以html方式展现,层次清晰便于查看表结构设计文档信息表DROP TABLE IF EXISTS `knowledge_documentinfo`;CREATE TABLE `knowledge_documentinfo` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `UnitGu原创 2021-09-11 16:52:17 · 1003 阅读 · 0 评论 -
SpringBoot实现用户统一管理与单点登陆
前言最近在开发产品的过程中,需要将业务功能拆分成独立子系统,既可以单独使用也可以集成部署,这里就需要对框架进行扩展,支持用户统一管理与单点登陆。我们的基础框架使用redis实现token认证,所以只需要所有子系统共享redis数据就可以实现单点登陆,主要的难点是sso统一用户管理,我们这里选择的是通过监听sso平台组织架构的变动分发同步到各个子系统,这样子系统只依赖sso的登陆/登出/校验凭据三个接口,组织架构查询还是使用具体业务系统数据。方案设计后端设计后端设计如下图所示,主要包含应用/服务注册,原创 2021-09-05 12:35:58 · 1044 阅读 · 3 评论 -
SpringBoot实现quartz定时任务可视化管理
前言在实际框架或产品开发过程中,springboot中集成quarzt方式基本是以job和trigger的bean对象方式直接硬编码完成的,例如以下代码示例。对于系统内定义的所有定时任务类型,具体执行类,执行策略,运行状态都没有一个动态全局的管理,所有决定将quartz做成可视化配置管理,便于统一管理,也降低了使用门槛,只需要关心job类的实现即可 @Bean public JobDetail SMSJobDetail() { return JobBuilder.newJo原创 2021-08-29 11:25:08 · 1782 阅读 · 2 评论 -
SpringBoot实现表单重复提交检测
前言在实际开发过程中,web应用经常会出现网络延迟,接口处理时间略长,用户习惯等原因造成的客户连续多次点击提交按钮调用接口,导致数据库会出现重复数据或这接口业务逻辑bug等问题方案利用redis锁实同一个用户同一个请求2秒内重复提交返回错误路由SubmitLock标记需要拦截的方法@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface Su原创 2021-08-29 10:55:39 · 439 阅读 · 0 评论