- 博客(2478)
- 资源 (32)
- 收藏
- 关注
转载 SpringBoot接口安全设计:接口限流、防重放攻击与签名验证实战(附源码)
在对外开放接口的过程中,如何确保接口不被恶意调用、数据不被篡改、请求不被重放,是每一个后端开发者都绕不过去的安全难题。尤其是在企业级对接中,签名校验机制已经成为“标配”。今天我们就以一个 Spring Boot 项目为例,带大家深入了解如何设计并实现一套安全、通用、可落地的接口签名校验方案。需要源码的,文末有源码的获取方式。,时长03:28一、为什么需要签名机制?签名机制的本质是“你说你是你,那你得证明一下”。:攻击者伪造请求,不断调用接口,拖垮服务器;:中间人修改了请求内容;
2025-05-26 11:40:05
37
转载 Java实现10万,并发去重,优雅地处理重复请求!
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。重复的场景有可能是:黑客拦截了请求,重放前端/客户端因为某些原因请求重复发送了,或者用户在很短的时间内重复点击网关重发….本文讨论的是如何在服务端优雅地统一处理这种情况,如何禁止用户重复点击等客户端操作不在本文的讨论范畴。利用唯一请求编号去重可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去重——只要这个唯一
2025-05-22 13:45:33
25
转载 MybatisPlus 不香了?小哥自研 Pro 版,效率翻十倍!
具体来说,该类中包含了五个基本HTTP操作(POST, GET),通过不同参数和请求方式对实体对象进行CRUD操作,即添加(insert)、删除(delete)、修改(update)、查询(getById)、存储(save)、列表查询(list)、分页查询(page)、统计数量(count)。需要注意的是,该控制器只是一个模板,实际使用时需要继承该控制器并传入相应的Service类作为泛型S的参数,并实现具体的CRUD方法。类,就可以拥有增删改查,查询列表,分页查询,排序,带参数查询,统计数量。
2025-05-22 13:44:59
39
转载 写了一个mybatis-generator-ui,各种代码自动生成,开源
这个项目是几年前无聊的时候写的,基本上就是借助Mybatis-generator的自动生成功能,做成了可视化的。可以自定义项目,模板和代码生成规则,个人用用还是挺香的,包括我自己做项目也会使用,确实能在一定程度上提升开发效率。如图,这样就导入成功了,系统会根据你的建表语句,自动去识别字段。系统会实时保存的,再转储SQL,可以看到最新的SQL。点击导入表,会从右侧弹出一个抽屉,能够看到所有的表。比如,我要在学生表新增一个状态,就点击新增一行。2025年05月14日 09:00。具体的自定义代码生成,直接看。
2025-05-19 08:31:32
39
转载 6个SpringBoot文件上传下载工具,从此告别“卡顿”和“超时”!!!
到这里,咱整了6种不同的文件上传下载工具,覆盖了从基础的本地存储到云端存储,再到高并发、大文件上传的场景。你要是做一个简单的上传功能,前面介绍的Spring Boot自带Multipart和OSS就能轻松搞定;如果你要做复杂的存储需求,MinIO可以为你提供分布式存储解决方案,给你带来高效且可控的存储体验。如果你做的是一个有较高并发或者大文件上传需求的系统,那就该考虑分片上传了,Nginx做反向代理,配合Spring Boot的高效上传策略,完美解决并发问题。
2025-05-19 08:31:01
127
转载 Java 文件处理:MultipartFile 与 File 互转
在Java Web开发中,和File是处理文件相关操作的重要类。主要用于接收客户端上传的文件,它封装了文件的相关信息和内容;File则代表本地文件系统中的文件或目录,用于对文件进行读写、删除等操作。在实际项目中,常常需要在和File之间进行转换,本文将详细介绍它们之间互转的原理、方法及应用场景。是Spring框架中定义的一个接口,位于包下。当客户端通过HTTP协议以格式上传文件时,Spring MVC会自动将上传的文件封装为对象。该接口提供了一系列方法来获取文件的相关信息,如文件名、文件大小。
2025-05-19 08:30:12
119
转载 SpringBoot接口防抖(防重复提交)的一些实现方案
设置额外选项:过期时间和SET_IF_ABSENT选项”,有些同学可能不太清楚SET_IF_ABSENT是个啥,这里我解释一下:SET_IF_ABSENT是 RedisStringCommands.SetOption 枚举类中的一个选项,用于在执行 SET 命令时设置键值对的时候,如果键不存在则进行设置,如果键已经存在,则不进行设置。从测试的结果上看,防抖是做到了,但是随着缓存消失、锁失效,还是可以发起同样的请求,所以要真正做到接口幂等性,还需要业务代码的判断、设置数据库表的UK索引等操作。
2025-05-19 08:29:00
27
转载 Java Stream 高效开发!16 个案例,让你秒速起飞!
我们会通过16个案例详细的讲解有关Stream函数的应用。将每一个元素进行平方操作,最后返回一个新的集合。点击上方“程序员蜗牛g”,选择“设为星标”大厂程序员一枚 跟蜗牛一起 每天进步一点点。跟蜗牛哥一起,每天进步一点点。操作,如下计算1亿个数的求和。
2025-05-16 08:30:35
16
转载 基于防重表的通用接口幂等性设计方案
从系统架构视角看,幂等性需要解决的核心问题是"请求唯一性识别"和"状态一致性维护"。一、什么是接口幂等性?六、AOP的切面实现。
2025-05-16 08:30:00
20
转载 SpringBoot接口通用返回值设计与实现
手动包装每个返回值很麻烦,我们可以使用Spring的。:状态码,用于标识请求结果(成功/失败/特定错误):实际返回的业务数据,使用泛型支持不同类型。三、增加traceId有助于问题排查。:可读的消息,用于前端展示或调试。四、SpringBoot集成。一、一个简单的通用返回值。二、增加分页数据支持。
2025-05-16 08:29:19
23
转载 SpringBoot实现接口防刷的5种实现方案
接口防刷是一个系统性工程,需要考虑多方面因素:安全性、用户体验、性能开销和运维复杂度等。本文介绍的5种方案各有优缺点,可以根据实际需求灵活选择和组合。无论采用哪种方案,接口防刷都应该遵循以下原则:• 最小影响原则:尽量不影响正常用户的体验• 梯度防护原则:根据接口的重要程度采用不同强度的防护措施• 可监控原则:提供充分的监控和告警机制• 灵活调整原则:支持动态调整防护参数和策略通过合理实施接口防刷策略,可以有效提高系统的安全性和稳定性,为用户提供更好的服务体验。
2025-05-12 08:47:53
70
转载 HTTP/2 + SSE 能否完全替代 Websocket吗?
服务器发送事件 (SSE) 是一种标准化协议,允许 Web 服务器将数据推送到客户端而无需使用替代机制,例如: ping、长轮询 (Long Polling) 或 WebSocket。服务器发送事件(SSE)是 HTML5 公布的一种服务器向浏览器客户端发起数据传输的技术。一旦创建了初始连接,事件流将保持打开状态 直到客户端关闭。该技术通过传统的 HTTP 发送,并具有 WebSocket 缺乏的各种功能,例如:自动重新连接、 事件 ID 以及 发送任意事件 的能力。
2025-05-12 08:46:53
33
转载 1.8w字图解Java并发容器: CHM、ConcurrentLinkedQueue、7 种阻塞队列的使用场景和原理
/ node数组最大容量:2^30=1073741824// 默认初始值,必须是2的幕数//数组可能最大值,需要与toArray()相关方法关联//并发级别,遗留下来的,为兼容以前的版本// 负载因子// 链表转红黑树阀值,> 8 链表转换为红黑树//树转链表阀值,小于等于6(tranfer时,lc、hc=0两个计数器分别++记录原bin、新binTreeNode数量,<=UNTREEIFY_THRESHOLD 则untreeify(lo))
2025-05-12 08:45:41
31
转载 Spring Boot 各种回滚骚操作实战(自动回滚、手动回滚、部分回滚)
那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果执行失败则隐式的回滚事务。建立在AOP之上的。脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。spring里事务是用注解配置的,当一个方法没有接口,单单只是一个内部方法时,事务的注解是不起作用的,需要回滚时就会报错。
2025-05-12 08:43:40
43
转载 别再造轮子了!Dify+MCP+DeepSeek开发实战保姆级教程,打造AI应用72变
之前分享过几篇关于MCP的文章,但都是在客户端中调用的,比如Cherry Studio,比如Cline,但它们都有一个共同的局限:当我在这些平台上调用MCP Server时,这些操作都仅限于我的本地环境,无法分享给他人,也无法在我们构建的Agent中使用。我们不再需要从零开始构建每一个功能,不再需要重复造轮子,而是可以像搭积木一样,将各种现成的能力组合起来,打造出千变万化的AI应用。1、点击右上角插件,选择从Marketplace中安装,搜索mcp,找到"MCP_SSE",点击安装。
2025-05-12 08:42:30
27
1
转载 Spring Boot 实战:SSE 实时通信方案设计与 WebSocket 深度对比
只需服务器到客户端的单向推送要求快速实现、低复杂性兼容现有 HTTP 基础设施(如认证、防火墙)
2025-05-05 15:30:42
71
转载 通用分页解决方案:简化项目开发中的分页难题
在实际项目开发过程中,分页功能的使用频率极高,尤其是针对不同数据表进行分页操作,往往是一件颇为繁琐的事情。不同的数据表结构、业务需求以及数据量大小,都可能导致分页实现方式的差异,这无疑增加了开发的复杂性和工作量。本文将分享一个通用分页解决方案,它能够对任意数据表实现分页,使用方法简单便捷,有效提升开发效率。
2025-04-24 08:11:55
32
转载 Spring Boot3+Vue2极速整合: 10分钟搭建DeepSeek AI对话系统
在生成式AI技术蓬勃发展的今天,大语言模型已成为企业智能化转型和个人效率提升的核心驱动力。作为国产大模型的优秀代表,DeepSeek凭借其卓越的中文语义理解能力和开发者友好的API生态,正在成为构建本土化AI应用的首选平台。本文将以Spring Boot3+Vue2全栈技术为基础,手把手带你打造一个具备以下特性的AI对话系统:实时流式对话交互体验;支持Markdown代码块/表格的专业级内容渲染;前端安全防护与响应式界面设计;高扩展性的API接入架构。
2025-04-22 08:53:42
100
转载 java对接Dify的聊天助手API(实战篇)
至此,后端已成功对接聊天对话的API,其他API操作同理,可以与前端快速的搭建AI对话聊天,基于知识库实现企业级需求!修改配置文件,由于Dify在本地部署,默认端口80与Dify冲突,否则造成服务不可用,所以修改为8080。前面的博客有讲到如何部署Dify以及简单使用,为了迎合企业级需求,快速搭建AI应用。目前idea版本2024.2,已成功破解,需要资料的可以加入技术群获取。测试该接口发现,需要认证信息,知道该怎么办了把,没错,启动前端!进入Dify的docker目录,cmd回车,执行如下命令。
2025-04-22 08:53:00
599
1
转载 Dify解除上传文件大小15MB限制
在使用Dify的知识库时,文件上传大小不能超过15MB。步骤一:打开Dify文件docker目录下的.env文件。步骤二:停止Dify服务后,重启。调整参数大小后,点击保存。否则,会提示错误信息。
2025-04-22 08:51:37
587
1
转载 接入SpringAI实现流式对话
本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走得更远。此次新增chatId字段,目的是为一次会话添加唯一标识,基于该标识存储会话记忆,目前使用的内存记忆功能,可以尝试使用向量数据库,永久有效。前面有讲到Python对接Deepseek实现对话,但基于现状,从事后端开发,侧重于Java,此次演示以SpringAI技术实现。此次基于SpringBoot工程演示,没有用到框架,一键启动,真方便。添加提示词功能,代码如下,重启后才可生效!步骤三:编写AI应用。
2025-04-22 08:50:45
102
转载 java对接Dify的工作流API(实战篇)
基于微服务架构的业务复杂度较高,在技术选型中我们采用Dify工作流来实现核心需求。Dify的工作流具备很多组件,大家可以根据需求灵活使用,此次演示为Demo,真实场景比这个要复杂哈。有些人就会问,Dify不是都实现了吗,为啥还要编写java代码去对接了,前端不是能对接python接口吗?前面的博客有讲到Dify工作流调接口查询数据以及调用Dify的聊天助手API,此博客需具备以上基础。测试文件上传,由于Demo版代码执行文件与工作流执行在一块,如果基于业务需求,中间会进行其他操作。步骤一:启动Dify。
2025-04-22 08:50:01
711
转载 Dify应用实战(18) - 发布成MCP服务
今天学习了将Dify系统开发的AI应用变成可供其他工具或者系统调用的MCP服务,从而打通了系统之间的壁垒。你的Dify应用将会直接为你的助手类工具使用,或者集成到现有应用中,能扩展其AI能力。终于MCP相关的话题可以告一段落了。从MCP是什么,到怎么开发,然后是怎么使用MCP,最后是自己化为MCP。期望读者能顺着麦金叔的脉络,真正的把这些学会,并融会贯通投入到自己的项目中。
2025-04-22 08:49:21
218
转载 SpringBoot 使用 TraceId 日志链路追踪!
用途:每一次链路,线程维度,添加最终的链路 ID traceId.MDC(Mapped Diagnostic Context) 诊断上下文映射,是@Slf4j提供的一个支持动态打印日志信息的工具。/*** 日志拦截器*/@Override//可以考虑让客户端传入链路ID,但需保证一定的复杂度唯一性;如果没使用默认UUID自动生成if (!returntrue;@Override// 请求处理完成后,清除MDC中的traceId,以免造成内存泄漏/**
2025-04-22 08:48:02
27
转载 基于数据库锁实现防重复提交
在Web应用开发中,重复提交问题是一个常见的挑战。当用户由于网络延迟、误操作等原因,多次点击提交按钮时,可能会导致相同的数据被多次插入到数据库中,从而引发数据一致性问题。为了解决这个问题,我们可以采用token机制,大多数实现是基于Redis实现,今天介绍如何结合数据库的悲观锁或乐观锁来实现对请求的有效验证,确保同一操作不会被重复执行。通过使用token机制结合数据库的悲观锁或乐观锁,我们可以有效地避免用户重复提交请求,保证数据的一致性和系统的稳定性。
2025-04-12 12:03:13
40
转载 实现一百万条数据的状态秒级更新!
点击上方“程序员蜗牛g”,选择“设为星标”跟蜗牛哥一起,每天进步一点点大厂程序员一枚 跟蜗牛一起 每天进步一点点31篇原创内容公众号为了提高订单状态更新的效率和系统的响应能力,我们决定采用分布式任务调度实现高效的订单状态批量更新。
2025-04-04 10:42:31
33
转载 多人同时导出 Excel 干崩服务器?产品让我实现一个排队导出功能!
引入EasyExcel百万级别的导出功能@Slf4j/*** 导出* @param response 输出流* @param pageSize 每页大小* @param t 导出条件* @param k Excel内容实体类* @param fileName 文件名称*/try {//查询导出总条数//页数i++) {//开始页//获取Excel导出信息String msg = "导出" + fileName + "异常";
2025-04-04 10:41:37
58
转载 性能炸裂!Spring Boot 3.4 + ThreadPoolTaskExecutor 批量插入百万数据!
在现代应用场景中,批量数据处理已经成为影响系统性能的关键因素之一。尤其是在大规模数据插入的过程中,传统的单线程方式往往难以满足高效数据处理的需求。,可以大幅度提升应用的性能,优化数据处理的效率,为企业级系统带来显著的收益!的最佳实践,提供完整的代码示例,确保数据的高效存储和一致性。提升大规模数据插入的效率,减少数据库压力,提高整体性能。,使数据插入任务并发执行,提高数据库写入吞吐量。在高并发、大数据量插入的场景下,传统的。,减少数据库锁竞争,提高吞吐量。,以适应不同负载的插入任务。
2025-04-04 10:40:38
34
转载 高效推送!Spring Boot 3.4 实现网页消息通知的 5 种最佳方案
在现代应用开发中,实时消息推送已成为提升用户体验的重要手段。无论是在线聊天、系统通知、金融数据更新,还是团队协作,服务器主动向浏览器推送信息的能力至关重要。本文将详细介绍 Spring Boot 3.4 中实现网页消息推送的五种主流方案,帮助开发者选择最适合的技术方案。
2025-03-31 08:47:43
121
转载 妙用Java 8中的 Function接口,消灭if...else(非常新颖的写法)
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro。项目地址:https://github.com/YunaiV/ruoyi-vue-pro。视频教程:https://doc.iocoder.cn/video/
2025-03-28 08:59:02
28
转载 Redis 项目常应用场景解析及实例
Redis以其独特的内存存储、丰富的数据类型、高效的原子操作及多种实用特性,成为现代项目开发中不可或缺的关键组件。以下将详细介绍Redis在多种常见场景下的应用,并结合Java代码实例进行说明。
2025-03-17 08:56:08
244
转载 Java高效压缩与解压实战:ZipUtils与GzipUtils工具类详解
文件压缩与解压是日常开发中的高频需求。本文提供两个完整的工具类(支持目录压缩)和(专注单文件处理),并附实战代码示例,助你轻松应对日志归档、数据传输等场景。
2025-03-15 11:47:02
79
转载 拒绝重复代码,封装一个多级菜单、多级评论、多级部门的统一工具类
来源:juejin.cn/post/7301909270907748378一、介绍介绍数据库字段设计二、统一工具类具体实现1. 定义接口,统一规范2. 编写工具类TreeNodeUtil三、测试你能看到很多人都在介绍如何实现多级菜单的效果,但是都有一个共同的缺点,那就是没有解决代码会重复开发的问题。如果我需要实现多级评论呢,是否又需要自己再写一遍?为了简化开发过程并提高代码的可维护性,我们可以创建一个统一的工具类来处理这些需求。在本文中,我将介绍如何使用SpringBoot创建一个返回多级菜单、多级评论、多
2025-03-15 11:42:30
54
转载 Spring 实现 3 种异步流式接口,干掉接口超时烦恼
这篇介绍三种实现异步流式接口的工具,算是 Spring 知识点的扫盲。使用起来比较简单,没有什么难点,但它们在实际业务中的应用场景还是很多的,通过这些工具,可以有效提高系统的性能和响应能力。文中 Demo Github 地址:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/springboot101/%E9%80%9A%E7%94%A8%E5%8A%9F%E8%83%BD/springboot-streaming- End-
2025-03-15 11:41:39
65
转载 12 种分片算法
本文中我们讲解了所支持的12种分片算法,每种算法都具有独特的特点。在实际应用中,需要结合具体的业务场景来灵活选择和应用适合的分片算法。
2025-02-13 09:09:42
100
转载 线程池中线程抛了异常,这样处理太优雅了!
小富2025年02月05日 14:01北京大家好,我是小富~xiaofucode.com 以搞钱为源动力的程序员学习指南78篇原创内容公众号在实际开发中,我们常常会用到线程池,但任务一旦提交到线程池之后,如果发生异常之后,怎么处理?怎么获取到异常信息?在了解这个问题之前,可以先看一下 线程池的源码解析,从源码中我们知道了线程池的提交方式:submit和execute的区别,接下来分别使用他们执行带有异常的任务!看结果是怎么样的!
2025-02-05 14:11:10
118
转载 高并发订单系统设计:每天新增100w订单数据的分库分表方案
原创 Fox2025年02月05日 07:49湖南在电商和在线服务领域,订单处理系统面临着巨大的数据压力。每天新增 100 万条订单数据的场景,要求系统具备高并发处理能力和良好的可扩展性。本文将探讨如何通过分库分表的设计来支撑高并发的订单处理系统。
2025-02-05 11:35:03
201
转载 APP中的签到、补签、连续签到天数如何实现
签到,指在规定的簿册上签名或写一“到”字,表示本人已经到达。在APP中使用此功能,可以增加用户粘性和活跃度。一个有签到功能的APP,往往会提供补签功能,连续签到多少天会给予相关的奖励;而为了进一步增加用户粘性,还会提供签到任务功能,完成任务也可获取对应的奖励。功能用例本文带你实现一个包含上述用例的签到功能,看完以后你会发现,签到,没有你想的那么复杂!
2025-01-17 10:02:25
245
转载 SpringBoot官方提供的实时消息推送解决方案,真香!
SseEmitter是Spring Framework中用于服务器发送事件(Server-Sent Events, SSE)的类。SSE是一种允许服务器主动向客户端推送数据的技术,通常用于实现如实时通知、数据流等功能。其工作原理基于HTTP协议,客户端通过HTTP请求订阅服务器的事件流,服务器则通过SseEmitter对象持续向客户端发送事件。SseEmitter的核心特性单向通信:SSE是单向的,只允许服务器向客户端推送数据,客户端不能通过此通道向服务器发送数据。
2025-01-08 18:43:09
1164
转载 Spring Boot整合SSE:实现高效实时通信
Server-Sent Events(SSE)是一种允许服务器向客户端推送数据的技术,为实现实时更新提供了一种简单而有效的方法。传统轮询是客户端定期向服务器发起请求以获取最新数据的方式,这种方式不仅增加了服务器的压力,也导致了较高的延迟。而SSE则是由服务器主动推送更新给客户端,减少了不必要的请求次数,提高了性能和用户体验。SSE是一种基于HTTP的服务器推送技术。:相比传统的轮询机制,SSE能够减少不必要的请求,从而降低服务器负担并提高响应速度。,易于实现:相比WebSocket,SSE的实现更加简单。
2025-01-08 18:42:34
257
interface使用
2011-02-06
新闻发布系统(jsp+ajax+oracle+java+javascript)
2011-07-10
航空订票系统(jsp+java+sqlserver+spring+servlet+strut)
2011-07-12
购物系统(shopping)用到的技术有(jsp+servlet+java+sqlerver+strut)
2011-07-09
springmvc+mybatis+mysql+log4j.xml+logjdbc+maven+nexus+dubbo
2017-05-10
springmvc+mybatis+mysql+log4jdbc+excel 实现sql日志输出和excel导出
2017-05-09
火车站售票系统.(java+oracle+jsp+javascript)
2011-07-09
网上书店系统(java+sqlserver+jsp+servlet+strut+spring)
2011-07-09
接口的详解,是你很容易学习接口
2011-03-08
企业电子商城系统(jsp+servlet +strut+sqlserver)
2011-07-09
权限管理系统
2013-03-23
物流信息网(jsp+sqlserver+servlet+strut)
2011-07-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人