<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_38245668的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_38245668</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_38245668]]></copyright><item><title><![CDATA[Redis+JWT 认证管理最佳实践]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/149752149</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/149752149</guid><author>qq_38245668</author><pubDate>Tue, 29 Jul 2025 17:27:32 +0800</pubDate><description><![CDATA[摘要： 分布式架构下，认证鉴权面临跨服务身份识别、权限同步、安全调用等挑战。Redis+JWT混合方案结合无状态令牌与动态权限管理： 认证阶段：登录生成JWT（携带用户ID），权限预存Redis； 鉴权阶段：业务服务先验签JWT，再查Redis校验动态权限； 优势：JWT保障身份认证高效无状态，Redis实现权限实时更新与强制失效。方案平衡性能与灵活性，适用于高并发分布式系统。]]></description><category></category></item><item><title><![CDATA[Spring Security 实践之认证鉴权]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/149645806</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/149645806</guid><author>qq_38245668</author><pubDate>Fri, 25 Jul 2025 18:14:54 +0800</pubDate><description><![CDATA[请求拦截阶段检查请求头中的 Token有 Token → 进入认证流程无 Token → 进入匿名（暂未生成匿名用户）处理流程认证处理阶段A. 有效 Token 流程解析 Token调用验证 Token验证通过后生成 Authentication 对象将认证信息存入B. 无效/缺失 Token 流程验证访问资源是否为如果是资源，直接放行如果不是资源，介入生成匿名认证对象将匿名认证信息存入授权检查阶段拦截请求调用进行权限决策从获取当前用户权限。]]></description><category></category></item><item><title><![CDATA[Spring Security 实践之登录]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/149606273</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/149606273</guid><author>qq_38245668</author><pubDate>Thu, 24 Jul 2025 15:33:59 +0800</pubDate><description><![CDATA[本文介绍了Spring Security在SpringBoot中的配置使用，重点解析了其核心认证流程和JWT集成方案]]></description><category></category></item><item><title><![CDATA[Api接口版本管理实现]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129914347</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129914347</guid><author>qq_38245668</author><pubDate>Sun, 02 Apr 2023 20:57:37 +0800</pubDate><description><![CDATA[最终的实现类可能是针对以下情况之一：路径匹配，头部匹配，请求参数匹配，可产生MIME匹配，可消费MIME匹配，请求方法匹配，或者是以上各种情况的匹配条件的一个组合。日常Api接口开发中，接口的变动时有发生，同时老接口保留逻辑，这时需要对接口进行版本标记；或此接口对外暴露，而后接口地址映射发生改变，此时不想调用方做出调整，可将老接口地址映射到新接口的处理逻辑中。接口，版本匹配规则为：调用方未指明版本，使用最新版本；调用方指定版本，使用 小于等于此版本接口中最接近的版本接口。返回版本 1 的数据，符合预期。]]></description><category></category></item><item><title><![CDATA[耗时的同步请求自动转异步请求]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129805845</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129805845</guid><author>qq_38245668</author><pubDate>Mon, 27 Mar 2023 23:00:31 +0800</pubDate><description><![CDATA[4、判断是被哪个线程唤醒的，如果是线程1，直接返回数据，请求结束；如果是线程2，则表示读取转换未完成，需要转换为异步处理，这时直接结束请求，返回提示信息。现在在项目中碰到一个情况，导出数据到excel，在数据量比较下的时候直接下载，在数据量比较大时保存到服务的文件列表，后续再供用户下载。1、主线程开启线程1进行数据读取和转换byte数组，处理结束唤醒主线程。2、开启线程2进行计时，到时间后唤醒主线程。1、使用包括主线程在内的3个线程。3、主线程阻塞，等待唤醒。]]></description><category></category></item><item><title><![CDATA[4、Nginx部署]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129655529</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129655529</guid><author>qq_38245668</author><pubDate>Thu, 23 Mar 2023 22:45:55 +0800</pubDate><description><![CDATA[本文使用 Kuboard 进行 Nginx的部署操作。Kuboard的部署可查看本文创建前，k8s已创建 apps 的 namespace，应用均部署于此 namespace。]]></description><category></category></item><item><title><![CDATA[3、搭建NFS]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129740202</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129740202</guid><author>qq_38245668</author><pubDate>Thu, 23 Mar 2023 22:01:55 +0800</pubDate><description><![CDATA[因部署使用k8s，所以后续在使用容器部署时，仅需和nfs server配置好存储卷的挂载关系即可。可看下篇：3x-movie之 4、Nginx部署。启动顺序，先启动rpc，再启动nfs。仅安装 nfs-utils 即可。2、平台文件的存储，上传和下载。1、前端项目的存储和发布。]]></description><category></category></item><item><title><![CDATA[2、搭建K8S集群]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129654903</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129654903</guid><author>qq_38245668</author><pubDate>Thu, 23 Mar 2023 21:35:39 +0800</pubDate><description><![CDATA[http://192.168.40.100:30080   其中 192.168.40.100 为 master 节点。主节点初始化  （上述步骤每个节点均需执行，当前步骤仅需主节点执行）安装kubelet、kubeadm、kubectl。所有pod处于running状态后，即可访问。移除以前的docker（新虚机可不执行）执行上图中的 （第三步）加入主节点操作。安装指定版本的docker并启动。直接复制结果，在子节点执行即可。设置.kube/config。docker 安装完成。查看安装后的pod情况。]]></description><category></category></item><item><title><![CDATA[1、VMWare创建虚拟机并设置网络]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129654890</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129654890</guid><author>qq_38245668</author><pubDate>Sun, 19 Mar 2023 20:55:36 +0800</pubDate><description><![CDATA[下载地址：http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/链接：https://pan.baidu.com/s/1cRpS6T5w2R6rWCkbTxZT_w。虚机配置选择，存储20G可以，下一步（默认是 1C1G，k8s  master节点需要 2C的配置）重启之后进入虚机内部，尝试ping www.baidu.com。选择刚下载的CentOS镜像文件，下一步。ping不通，下一步，修改网络配置。虚机名字和位置填写，下一步。]]></description><category></category></item><item><title><![CDATA[记-使用JAXB进行对象转XML时的实体继承问题]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/129097915</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/129097915</guid><author>qq_38245668</author><pubDate>Sat, 18 Feb 2023 12:47:41 +0800</pubDate><description><![CDATA[记录并解决 JAXB 在格式化子类实体时的属性丢失问题]]></description><category></category></item><item><title><![CDATA[Redis系列（二）分布式锁]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/115829710</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/115829710</guid><author>qq_38245668</author><pubDate>Sun, 25 Apr 2021 23:14:45 +0800</pubDate><description><![CDATA[Redis系列（二）分布式锁前言Redis 分布式锁代码实现
前言
 分布式应用在进行逻辑处理时经常会遇到并发的问题。在单机系统中可以使用原子操作类、加锁等一系列操作来控制并发问题，但是在分布式系统中这些操作都会出现或多或少的问题。这种情况就必须引入分布式锁的概念，以保证原子操作的进行。

原子操作：指不会呗线程调度机制打断的操作。这种操作一旦开始，就会一致运行到结束，中间不会有任何线程切换。

Redis 分布式锁
 分布式锁目标就是在Redis中抢占一个资源，当其他客户端来抢占时，发现无法获取资源，就只]]></description><category></category></item><item><title><![CDATA[Redis系列（一）基础数据结构概述]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/109412495</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/109412495</guid><author>qq_38245668</author><pubDate>Fri, 19 Mar 2021 18:36:57 +0800</pubDate><description><![CDATA[基于 Redis 的消息通知实现一级目录二级目录三级目录
一级目录
二级目录
三级目录

]]></description><category></category></item><item><title><![CDATA[WebSocket 集群 session 共享方案]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/109411901</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/109411901</guid><author>qq_38245668</author><pubDate>Sun, 01 Nov 2020 10:54:27 +0800</pubDate><description><![CDATA[集群式聊天室session及群发消息初步方案问题引入思路分析代码实现

！！ 本文聊天室基于 websocket 进行实现，同时也为解决websocket session在集群部署服务时的无法共享导致的收发消息问题。

问题引入
&nbsp;&nbsp;&nbsp;&nbsp;当我们使用 websocket 实现聊天时，后端服务会将所有的 websocket session缓存起来，之后根据收到的消息，遍历或者找到某个session进行消息的发送。 但是在我们进行后端集群部署时，这里假设存在2台后端服务器A]]></description><category></category></item><item><title><![CDATA[kafka 消息丢失和重复消费]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/106976495</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/106976495</guid><author>qq_38245668</author><pubDate>Fri, 26 Jun 2020 23:38:08 +0800</pubDate><description><![CDATA[kafka 消息丢失和重复消费前言消息丢失producerconsumer重复消费
前言
在使用mq中间件时，如果消费数据处理不当可能会引起消息丢失和重复消费的问题。本文针对kafka的这两个问题进行场景分析和可行性方案说明。
消息丢失
消息丢失一般指消息发送方producer和消息消费方consumer两方面。
producer
消息发送方可以通过配置request.required.acks属性来保证消息的安全发送，值包括：

0：表示不进行消息接收是否成功的确认
1：表示当Leader接收成功时确认
]]></description><category></category></item><item><title><![CDATA[Kafka-Consumer -- 分区消费策略]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/105983875</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/105983875</guid><author>qq_38245668</author><pubDate>Fri, 26 Jun 2020 22:46:52 +0800</pubDate><description><![CDATA[Kafka-Consumer 源码解析 -- 分区消费策略

]]></description><category></category></item><item><title><![CDATA[Kafka-Consumer 源码解析 -- 数据消费]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/105982973</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/105982973</guid><author>qq_38245668</author><pubDate>Fri, 26 Jun 2020 21:33:15 +0800</pubDate><description><![CDATA[Kafka-Consumer 源码解析 -- 数据消费

]]></description><category></category></item><item><title><![CDATA[PageHelper 使用 ThreadLocal 的线程复用问题]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/105984171</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/105984171</guid><author>qq_38245668</author><pubDate>Sat, 30 May 2020 00:45:11 +0800</pubDate><description><![CDATA[PageHelper 使用 ThreadLocal 的线程复用问题

]]></description><category></category></item><item><title><![CDATA[Kafka-Consumer 源码解析 -- 数据拉取和offset提交]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/105982955</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/105982955</guid><author>qq_38245668</author><pubDate>Thu, 28 May 2020 23:58:26 +0800</pubDate><description><![CDATA[Kafka-Consumer 源码解析 -- 数据拉取和offset提交

]]></description><category></category></item><item><title><![CDATA[Kafka-Consumer 源码解析 -- rebalance过程和partition的确认]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/106108190</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/106108190</guid><author>qq_38245668</author><pubDate>Sat, 16 May 2020 01:03:11 +0800</pubDate><description><![CDATA[Kafka-Consumer 源码解析 -- rebalance过程和partition的确认前言1、rebalance过程分析2、consumer的partition确认

本文参考：
参考1：https://www.cnblogs.com/benfly/p/9605976.html

前言
&nbsp;&nbsp;&nbsp;&nbsp;在listener注册和启动之后，每个KafkaListener会开启若干个线程consumer进行数据拉取。这些consumer会先加入到对应的kafka消费组中，触]]></description><category></category></item><item><title><![CDATA[Kafka-Consumer 源码解析 -- listener 注册和启动]]></title><link>https://blog.youkuaiyun.com/qq_38245668/article/details/105900191</link><guid>https://blog.youkuaiyun.com/qq_38245668/article/details/105900191</guid><author>qq_38245668</author><pubDate>Thu, 07 May 2020 22:06:01 +0800</pubDate><description><![CDATA[浅谈 Kafka-Consumer 源码

]]></description><category></category></item></channel></rss>