基于 Spring Boot 的 Web 三大核心交互案例精讲

基于 Spring Boot 的 Web 三大核心交互案例精讲
(2026年最实用写法 · 企业真实场景)

在 Spring Boot Web 开发中,真正决定项目质量和维护难度的,往往不是写了多少 Controller,而是你是否真正掌握了以下三大核心交互场景正确、优雅、可维护的处理方式:

  1. 前后端分离的登录 + Token 认证(JWT + 无感刷新)
  2. 文件上传下载(大文件、分片上传、断点续传)
  3. 实时消息推送(WebSocket + SSE 对比实战)

下面用最现代的 Spring Boot 3.x + Spring Security 6.x 写法,给你最实用的完整案例。

1. 前后端分离登录 + Token 认证(JWT + 无感刷新)

核心要点

  • Access Token 短效(15~60分钟)
  • Refresh Token 长效(7~30天),HttpOnly Cookie 存储
  • 前端拦截 401 自动刷新
  • 滚动刷新(可选,安全性更高)

后端关键代码片段(简化版)

// 登录返回双 token@PostMapping("/api/auth/login")publicResponseEntity<?>login(@RequestBodyLoginRequestrequest,HttpServletResponseresponse){// 验证用户名密码...StringuserId="user-1001";StringaccessToken=jwtUtil.generateAccessToken(userId,30);// 30分钟StringrefreshToken=UUID.randomUUID().toString();// 存 redis(带过期时间)redisTemplate.opsForValue().set("refresh:"+refreshToken,userId,14,TimeUnit.DAYS);// 设置 HttpOnly CookieCookierefreshCookie=newCookie("rt",refreshToken);refreshCookie.setHttpOnly(true);refreshCookie.setSecure(true);// 生产必须 httpsrefreshCookie.setPath("/");refreshCookie.setMaxAge(14*24*60*60);refreshCookie.setAttribute("SameSite","Strict");response.addCookie(refreshCookie);returnResponseEntity.ok(newTokenVO(accessToken));}// 刷新 token 接口@PostMapping("/api/auth/refresh")publicResponseEntity<?>refresh(HttpServletRequestrequest){StringrefreshToken=null;Cookie[]cookies=request.getCookies();if(cookies!=null){refreshToken=Arrays.stream(cookies).filter(c->"rt".equals(c.getName())).map(Cookie::getValue).findFirst().orElse(null);}if(refreshToken==null){returnResponseEntity.status(401).body("无 refresh token");}StringuserId=redisTemplate.opsForValue().get("refresh:"+refreshToken);if(userId==null){returnResponseEntity.status(401).body("refresh token 已失效");}// 可选:滚动刷新(生成新 refresh token)StringnewRefreshToken=UUID.randomUUID().toString();redisTemplate.delete("refresh:"+refreshToken);redisTemplate.opsForValue().set("refresh:"+newRefreshToken,userId,14,TimeUnit.DAYS);// 返回新 access tokenreturnResponseEntity.ok(newTokenVO(jwtUtil.generateAccessToken(userId,30)));}

前端 Axios 拦截器(最经典写法)

// request 拦截器 - 自动加 tokenapi.interceptors.request.use(config=>{consttoken=localStorage.getItem('access_token')if(token){config.headers.Authorization=`Bearer${token}`}returnconfig})// response 拦截器 - 401 自动刷新api.interceptors.response.use(response=>response,asyncerror=>{constoriginalRequest=error.configif(error.response?.status===401&&!originalRequest._retry){originalRequest._retry=truetry{const{data}=awaitapi.post('/auth/refresh')// 自动携带 cookielocalStorage.setItem('access_token',data.accessToken)// 重试原请求originalRequest.headers.Authorization=`Bearer${data.accessToken}`returnapi(originalRequest)}catch(refreshErr){// 刷新失败 → 跳转登录localStorage.removeItem('access_token')window.location.href='/login'returnPromise.reject(refreshErr)}}returnPromise.reject(error)})

2. 文件上传下载(大文件、分片、断点续传)

三种主流方式对比(2026企业真实选型)

场景推荐方式最大文件断点续传复杂度代表技术栈
小文件(<50MB)普通 multipart50~100MB不支持★☆☆☆☆spring.servlet.multipart
中大文件(100MB~2GB)分片上传 + 秒传无上限支持★★★☆☆tus / Resumable.js / 前端分片
超大文件、企业级需求分片 + Redis 记录无上限完美支持★★★★☆minio + redis + 前端分片

推荐中型项目写法:分片上传 + 秒传(Redis 判断)

后端核心代码

@PostMapping("/upload/chunk")publicResponseEntity<?>uploadChunk(@RequestParam("file")MultipartFilechunk,@RequestParam("md5")StringfileMd5,@RequestParam("chunkIndex")intchunkIndex,@RequestParam("totalChunks")inttotalChunks){// 1. 秒传判断if(redisTemplate.hasKey("file:md5:"+fileMd5)){returnResponseEntity.ok("秒传成功");}// 2. 保存分片(临时目录 + chunkIndex 命名)StringchunkPath=uploadDir+"/"+fileMd5+"/"+chunkIndex;chunk.transferTo(newFile(chunkPath));// 3. 记录已上传分片redisTemplate.opsForSet().add("chunks:"+fileMd5,String.valueOf(chunkIndex));// 4. 判断是否全部上传完成LonguploadedCount=redisTemplate.opsForSet().size("chunks:"+fileMd5);if(uploadedCount==totalChunks){// 合并分片(异步任务或立即合并)mergeChunks(fileMd5,totalChunks);// 记录完成redisTemplate.opsForValue().set("file:md5:"+fileMd5,"completed",7,TimeUnit.DAYS);}returnResponseEntity.ok("分片上传成功");}

前端推荐库(2026年最流行):

  • resumable.js(最稳定)
  • uploader.js/tus-js-client(支持 tus 协议)
  • spark-md5(前端算 MD5 实现秒传)

3. 实时消息推送(WebSocket vs SSE 终极对比实战)

2026年真实选型表

需求场景首选技术双向通信浏览器兼容断线重连实现复杂度代表框架/库
聊天、IM、协作编辑WebSocket极好需手动★★★★☆Spring WebSocket + STOMP
服务器主动推送(通知、进度)SSE极好自动★★☆☆☆SseEmitter
海量用户单向广播SSE极好自动★★☆☆☆Redis Pub/Sub + SSE
低频、兼容性极致要求Long Polling最好自动★☆☆☆☆基本不用了

SSE 推荐写法(最简单、最高性价比)

@GetMapping(value="/progress/{taskId}",produces=MediaType.TEXT_EVENT_STREAM_VALUE)publicSseEmitterprogress(@PathVariableStringtaskId){SseEmitteremitter=newSseEmitter(Long.MAX_VALUE);// 长连接// 异步推送进度Executors.newSingleThreadExecutor().submit(()->{try{for(inti=0;i<=100;i+=10){emitter.send(SseEmitter.event().name("progress").data(newProgressVO(i,"处理中...")));Thread.sleep(1000);}emitter.send(SseEmitter.event().name("complete").data("任务完成"));emitter.complete();}catch(Exceptione){emitter.completeWithError(e);}});returnemitter;}

前端 SSE 写法

constsource=newEventSource(`/api/progress/${taskId}`);source.addEventListener('progress',e=>{constdata=JSON.parse(e.data)console.log(`进度:${data.percent}% -${data.message}`)})source.addEventListener('complete',e=>{console.log('任务完成!')source.close()})source.onerror=()=>{console.log('连接断开,浏览器会自动重连...')}

总结:三大核心交互的企业级优先级排序(2026)

  1. 必须掌握:前后端分离 Token 认证 + 无感刷新(几乎所有项目都有)
  2. 强烈建议:文件分片上传 + 秒传(中大型项目必备)
  3. 根据业务选:SSE(单向推送首选) > WebSocket(双向实时首选)

你目前项目里最常遇到哪个交互的痛点?
是 Token 刷新并发问题?大文件上传卡顿?还是实时推送掉线重连?

告诉我,我可以给你更针对性的代码优化或避坑方案~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1174189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大兴安岭呼玛塔河漠河英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在全球化留学热潮下,雅思成绩已成为大兴安岭、呼玛、塔河、漠河地区学子出国深造的核心门槛,然而本地考生普遍面临雅思培训优质资源匮乏、选课迷茫、提分路径模糊等痛点。如何筛选靠谱实用的教育机构,获取高效提分技…

2026年母线槽厂家推荐榜:宝应东茂电气全系供应耐火/密集/封闭/管型母线槽,适配多场景电力传输 - 品牌推荐官

在电力传输领域,母线槽与管型母线作为核心设备,其性能直接影响系统稳定性与安全性。宝应东茂电气有限公司凭借技术积累与产品创新,成为行业关注的焦点。该公司专注母线槽与管型母线研发制造,构建了从产品设计到技术…

他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

// 后端&#xff1a;Spring Boot 实现赛博塔罗API // 项目结构&#xff1a; // - pom.xml // - src/main/java/com/example/TarotApplication.java // - src/main/java/com/example/controller/TarotController.java // - src/main/java/com/example/model/TarotCard.java // -…

2026年管道坡口机厂家实力推荐榜:深圳凯德盛全系供应,覆盖钢板/平板/便携式等10类机型 - 品牌推荐官

在焊接辅助设备领域,深圳凯德盛机械设备有限公司凭借全链条技术积累与市场深耕,成为管道坡口机行业的标杆企业。其产品线覆盖管道坡口机、内涨式坡口机、钢板坡口机、平板坡口机、便携式管道坡口机、手提式坡口机、管…

2026年铝板厂家实力推荐榜:5754/6061/氧化/1060/3003/冲孔/5083/5052铝板全系供应,上海岱通铝业领衔 - 品牌推荐官

在工业材料领域,铝板因其轻量化、耐腐蚀、易加工等特性,广泛应用于航空航天、汽车制造、建筑装饰、电子电器等多个行业。随着市场需求的多元化发展,铝板的种类与规格不断丰富,其中5754铝板、6061铝板、氧化铝板、1…

【C++】哈希扩展——位图和布隆过滤器的介绍与实现

【C】哈希扩展——位图和布隆过滤器的介绍与实现&#xff08;2026年实用版&#xff09; 哈希扩展是数据结构中的高频话题&#xff0c;尤其在海量数据场景&#xff08;如缓存、去重、搜索&#xff09;。位图&#xff08;Bitmap&#xff09; 和 布隆过滤器&#xff08;Bloom Fil…

Proxmox VE Helper-Scripts版本更新测试计划:验证矩阵 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

重新定义需求分析:从“写文档”回归“造价值” - 实践

重新定义需求分析:从“写文档”回归“造价值” - 实践2026-01-17 16:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

2026年高压/夹布/大口径输水胶管权威推荐榜:河北鼎通橡塑制品有限公司适配矿山、建筑、农业多场景输水解决方案 - 品牌推荐官

河北鼎通橡塑制品有限公司生产的大口径胶管,仅仅是其庞大的产品矩阵中的一个环节。在现代工业输送系统中,无论是矿山排水、建筑供水还是农业灌溉,胶管的质量直接关系到整个系统的安全与效率。01 行业全景:输水胶管…

2026年IP66庭院灯厂家权威推荐榜单:庭院太阳能灯/户外照明庭院灯/农村庭院灯/IP65庭院灯/乡村路灯源头厂家精选 - 品牌推荐官

在户外照明领域,IP66防护等级已成为衡量庭院灯在复杂户外环境中长期可靠性的核心指标。它代表了灯具对灰尘的完全防护以及抵御强力喷水的能力,这对于应对我国多样的气候条件至关重要。随着城乡人居环境提升与智慧城市…

Stirling

讲一些其他地方可能见不到的东西。 这里有一题叫做碎梦。 线性递推做到 \(O(m^3\log n)\) 是平凡的。没写出来的敲一下。 \(k\) 很小。好像可以做点文章。 考虑每两个点值 \(S(x_1,y_1),S(x_2,y_2)\) 之间的贡献。假设…

2026年管道设备推荐:沧州铭信管道有限公司,涂塑/耐磨/衬塑/衬胶/双金属管道全解析 - 品牌推荐官

在管道工程领域,管道材质与工艺的选择直接影响系统的运行效率与使用寿命。沧州铭信管道有限公司凭借多年技术积累,形成了覆盖涂塑管道、耐磨管道、内外衬塑管道、碳钢衬塑管道、衬塑管道、耐磨衬胶管道、衬胶管道、双…

2025年郑州电线电缆回收公司推荐榜:郑州恒森二手空调回收,电缆回收/废旧电缆回收/旧电缆回收/回收电缆/收购电线电缆/回收废旧电缆/回收电线电缆/电缆收购/收购电缆公司精选 - 品牌推荐官

在郑州的城市更新浪潮中,工业区改造与老旧小区升级产生了大量废旧电缆。一家深耕郑州市场8年的本地公司,仅一年就专业处理超过2000吨废旧电缆,服务超3000家客户,成为区域循环经济的关键节点。 随着“无废城市”建设…

2026年吨包袋厂家实力推荐:唐山吴晨嘉科技,防水/耐磨/定制吨包袋全系供应 - 品牌推荐官

在工业包装领域,吨包袋作为大宗货物运输的核心载体,其性能直接关系到物流效率与货物安全。据行业数据显示,2025年国内吨包袋市场规模已突破120亿元,年复合增长率达8.3%,其中防水、耐磨、定制化产品需求占比超过65…

十年深耕,代码为证:深度盘点昊客网络APP/小程序/软件开发的实力服务与成功客户实践 - 深圳昊客网络

深圳市昊客网络科技有限公司(简称:昊客网络)!公司成立于2016年,公司现有团队成员三十余人。团队项目经理、前后端开发团队、设计美工、商务团队经理均在行业内工作15年以上。开发 APP、微信小程序或通用软件涉及不…

2026年不锈钢球/302不锈钢球/轴承钢球厂家推荐:常州市苏南伟杰钢球有限公司全系产品供应 - 品牌推荐官

在工业制造领域,不锈钢球、302不锈钢球、碳钢球及轴承钢球作为关键零部件,广泛应用于轴承、化工、电子、自行车等多个行业。其质量稳定性直接影响设备运行效率与使用寿命。本文聚焦常州市苏南伟杰钢球有限公司(原武…

2026年北京云服务器代理阿里云公司实力推荐榜单:云服务器代理华为云 /云服务器代理天翼云 /云服务器代理火山云 /云服务器代理腾讯云服务商精选 - 品牌推荐官

在北京,企业向云端的迁移正成为驱动数字化转型的核心。作为全球领先的云服务商之一,阿里云提供了广泛的基础设施和平台服务,而专业的本地代理服务公司,则能将标准化的云产品,转化为贴合企业业务实际的解决方案。他…

Windows免费开源神器!这款番茄时钟,治好了我10年拖延症!

下载链接 http://pan.freedw.com/s/hi0XZk 软件介绍 Windows免费开源神器&#xff01;这款番茄时钟&#xff0c;治好了我10年拖延症&#xff01; 软件特点 番茄钟功能 定时任务&#xff0c;定时提醒 免费使用&#xff0c;体积小巧 软件截图

绥化市绥棱青冈庆安英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思培训市场鱼龙混杂的当下,绥化市绥棱、青冈、庆安地区的雅思考生普遍面临着选课迷茫、优质资源匮乏、提分无门的核心痛点。如何筛选出靠谱的教育机构,获取实用的提分技巧、个性化备考方案,实现高分目标顺利通过…

2026年复卷机设备推荐榜:苏州富日智能装备有限公司,双轴/分切/全自动复卷机全系供应 - 品牌推荐官

在工业自动化设备领域,复卷机作为薄膜、纸张、金属箔等材料加工的核心设备,其性能直接影响生产效率与成品质量。苏州富日智能装备有限公司凭借多年技术积累,已发展为集研发、生产、销售、服务为一体的专业智能机械制…