- 博客(45)
- 收藏
- 关注
原创 Cookie / Session / Token / JWT:有状态、无状态,一次性讲清楚
服务端是否保存会话信息✅有状态(Stateful):服务端存储「身份凭证 ↔ 用户会话」的映射关系。每次鉴权,服务端需要去查询这份存储,确认登录状态。✅无状态(Stateless):服务端不存储任何会话记录。身份信息全部封装在凭证本身,鉴权只校验凭证合法性,不需要查询外部存储。注意:有/无状态,描述的是服务端,和客户端浏览器无关。有状态和无状态,核心看服务端是否保存会话数据。Cookie是存储载体,Session是有状态会话方案。Token是身份令牌统称:原生JWT是无状态,靠签名校验;
2026-09-23 17:04:29
140
原创 一次微信退款失败的复盘:订单号、交易号与商户号
当时的问题是,支付成功后的交易流水号没有稳定地沉淀到订单中,退款链路缺少完整的原支付上下文。排查过程中连续发现了两个问题:先是缺少支付交易流水号,补齐后又发现订单实际支付的商户号没有被正确区分。退款时,微信需要用原商户订单号或微信交易号定位原支付单。最终发现,寄存和寄送使用的是两个不同的商户号,但退款代码只按订单业务类型做了不完整的判断,部分订单退款时使用了另一个商户号的证书和配置。这次问题让我重新认识到:退款不是“拿订单号调一下接口”这么简单,它本质上是在某个特定商户号下,对一笔已支付交易发起后续操作。
2026-08-28 09:41:07
162
原创 Spring Boot 多模块服务间 API Token 鉴权排查记录
带 X-Api-Client 或 X-Api-Token 的服务间请求:不在旧 Filter 中按 JWT 拦截,继续交给 AuthInterceptor。没有普通用户 JWT,因此旧 Filter 会先拦截请求,AuthInterceptor 根本没有机会校验 API Token。这次需求是:配送端调用用户端的消息、下单、开柜接口时,不再使用普通用户登录 JWT,而是使用服务间 API Token 鉴权。业务接口返回 401/403 时,删除缓存、重新申请 token,并只重试一次。
2026-08-04 15:55:24
188
原创 【JAVA】我第一个上线项目
4.独立完成项目阿里云 ECS 云服务器部署,通过 Nginx 配置反向代理、跨域处理与多端口路由,实现三端前端独立部署;1.负责文章发布核心、自动审核(阿里云内容审核服务)、延迟任务(Redis + @Scheduled + setnx分布式锁)模块的开发。)、平台管理、用户行为(redis、kafka)、热点文章(XXL-JOB,redis)的模块开发。4.负责热点文章的实时计算(kafkaStream)、文章评论(MongoDB)的模块开发。)、新增文章同步添加索引(kafka)的模块开发。
2026-05-10 11:43:11
328
原创 黑马头条 关于热文章实时计算的思考
xxl-job 负责每天生成基础热点,Kafka Stream 负责实时增量更新,两者配合实现 "准实时" 的热点效果。Kafka Stream 的核心价值是窗口聚合和状态管理,解决了原生 Kafka 做实时计算时数据库写入压力过大的问题。MySQL 存全量统计数据,Redis 存热点文章列表,前端通过轮询 + 下拉刷新从 Redis 获取最新数据。
2026-04-20 21:02:39
432
原创 【黑马头条】微服务架构下统一获取登录用户 ID 的完整流程(解决 ThreadLocal.getUser ()=null)
在当前请求线程中存储用户信息,整个请求链路(Controller→Service→Mapper)共享,且线程之间互不干扰。在微服务架构中,我们不会在每个微服务都重复解析用户 Token,而是采用 **「网关统一认证 + 微服务直接获取」:一次解析 Token,所有微服务共享,避免重复工作,统一认证入口。:把我们写的拦截器注册到 SpringMVC 中,否则拦截器不会执行。:在任何需要当前登录用户信息的地方,直接调用工具类即可,不用再传参。:拦截微服务的所有请求,从网关转发的请求头中拿到。
2026-04-10 14:06:00
77
原创 黑马头条・Admin 用户审核页踩坑全复盘:从网关不通到 Feign 双层嵌套
这几天在做黑马头条功能时,从前端请求到网关,再到 admin 远程调用 user 服务,一路踩了 N 多个坑,最后终于成功渲染出数据。把所有问题按完整复盘一遍,避免后人再踩。
2026-04-05 09:30:36
218
原创 从疑惑到通透:微服务跨服务调用的核心真相(附黑马头条实战感悟)
结合黑马头条的实战,以及自己的顿悟,整理出3个最实用、最贴合企业开发的原则,记下来就能避坑:数据归属原则:谁管理数据,谁提供接口;自己的 data 自己查,别人的 data 只能调接口,不能直接跨库;接口隔离原则:依赖接口不依赖表,依赖服务不依赖库,只要接口返回值不变,内部逻辑随便改;耦合禁忌原则:绝对禁止跨业务查表,否则表结构、库名、服务拆分时,你的服务一定会“炸”。
2026-04-04 15:38:09
337
原创 MyBatis 传参核心:#{ } 与 ${ } 区别详解(避坑+面试重点)
口诀:能 #{ 就 #{,实在不行才 ${}。解析:整个恶意参数被当作一个字符串(转义了单引号),MySQL 只会查询“张三' or '1'='1”这个字符串对应的频道,不会执行 `or '1'='1` 这个永真条件,避免了全表数据泄露。用 `#{name}` 最终执行的 SQL:`select * from wm_channel where name = '张三\' or \'1\'=\'1'`解析:`or '1'='1` 是永真条件,会查询出表中所有数据,造成数据泄露,这就是典型的 SQL 注入攻击。
2026-04-03 16:40:11
1169
原创 黑马头条项目核心疑惑总结:nginx / 网关 / Nacos 联通逻辑 + MinIO 用途
nginx 只负责前端托管 + 请求转发到网关,靠端口直连,和 Nacos 无关网关是微服务入口,从 Nacos 获取路由和服务地址,实现请求分发Nacos 是微服务大脑,只服务于微服务,不参与 nginx 通信本地前端文件给管理员用,MinIO 存储普通用户的业务静态资源后台接口 404,优先检查 Nacos 中网关的路由配置是否匹配。
2026-04-02 19:17:54
385
原创 黑马头条敏感词功能开发全踩坑复盘:从 404 到完美跑通的血泪史
实体类直接加@TableName("库名.表名"),不用改数据源,不影响原有业务,零风险适合 admin 后台跨库查询其他模块表的场景,完美适配。
2026-03-31 19:07:33
354
原创 【JAVA】关于拦截器(Interceptor)和过滤器(Filter)的思考对比
Spring 才会把它加入拦截链。Spring 不认识它!,自动注册,自动生效!
2026-03-29 13:09:57
70
原创 [JAVA]关于异常的处理思考
类似这种,发现不对就返回信息给前端,应该说是用户吗,不对,我们的信息应该是先到前端,前端是不是要处理errorResult来封装成让用户看得懂的那种提示信息。然后我就对比想了想,这个数据的检查手段,是根据我们是否要把错误信息发给用户看,如果我们只是需要自己的业务逻辑来判断,就不需要发给用户,就。我看老师有时候写StringUtils.isNotBlank(message) 这种来检查参数对不对,对就运行 但有时候就是。一下记录日志,方便报错的时候进行排查。
2026-03-28 14:37:13
48
原创 面试问题controller和service能不能互相替换
摘要:Spring注解@Controller、@Service、@Repository虽然底层都是@Component,语法上可以互换,但实际项目中绝对不能替换。原因在于:@Controller被SpringMVC管理用于接收请求;@Service支持事务和AOP增强;@Repository专用于数据库操作。互换会导致接口失效、事务异常、架构混乱,违背职责分离原则。面试时应强调框架赋予的特殊功能差异,而非仅看语法兼容性。
2026-03-22 19:10:23
428
原创 京东商品搜索结果爬取(特定关键词)
href = li.ele('css:.p-name a').attr('href') # 详情页。shop_name = li.ele('css:.hd-shopname').text #店铺。title = li.ele('css:.p-name a em').text # 标题。commit = li.ele('css:.p-commit a').text #评价。描述实验的设计和步骤,包括选择的爬虫工具、爬取的网站、爬取的数据类型等。dp.ele('css:#key').input('手机')
2025-01-11 09:38:12
1126
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1