logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Spring Boot AOP 实战

面向切面编程(AOP, Aspect-Oriented Programming)是 Spring 框架的核心特性之一。它通过预编译方式和运行期动态代理实现程序功能的统一维护。在 Spring Boot 生态中,AOP 主要用于处理日志记录、性能统计、安全控制、事务处理、异常处理等横切关注点(Cross-cutting Concerns)。

#spring boot#java#后端
Spring Boot 登录拦截的两种实现:手写拦截器 vs Spring Security

在 Web 后端开发中,“登录拦截”与“身份识别”是系统最基础的安全防线。我们需要确保只有经过认证的用户才能访问受保护的资源,并且在后续的业务逻辑中能够随时获取当前操作用户的身份信息。轻量级派:不引入额外框架,利用 Spring MVC 的拦截器 (HandlerInterceptor)配合手动实现。框架派:使用业界标准安全框架,利用其过滤器链和上下文管理机制。本文将深入代码底层,详细拆解这两种方

#spring#spring boot#后端
深入解析 ThreadLocal:架构演进、内存泄漏与数据一致性分析

在多线程并发编程中,ThreadLocal 是实现线程封闭(Thread Confinement)的核心工具。它通过为每个线程提供独立的变量副本,解决了并发环境下的线程安全问题。然而,其底层实现的演进、内存模型的复杂性以及在线程池环境下的潜在风险,往往是开发者容易忽视的盲区。本文将深入剖析 ThreadLocal 的底层原理及其版本差异。强引用 (Strong Reference):这是 Java

#架构#java#jvm
Java Stream 原理与实践

Stream 的每一步操作(Source, Filter, Map, Terminal)在底层都对应一个对象。这些对象通过(上游) 和nextStage(下游) 指针连接,形成一个双向链表。Head:指向数据源。中间节点:保存了你传入的 Lambda 表达式(比如x -> x > 5Tail:指向终止操作。当你调用.filter()或.map()时,Stream 仅仅是将这些操作节点添加到了链表里

#java#后端
从 SSO 登录到跨系统资源访问:OAuth2 授权码模式全链路交互详解

也就是当用户登录后,授权服务器不再弹出“是否同意某某系统访问您的信息”的询问页面,而是直接默认用户同意,静默发放授权码(Code)。),AS服务器的code表,accesstoken表,approve表中可能有userid,clientid,resourceid,scope字段它代表了第三方应用。的关键元数据,包括:客户端名称(“系统 B”)、当前用户信息、以及申请的权限范围(如“读取系统 A 的

#spring boot#java#后端 +2
Spring Boot 构建 SaaS 多租户架构

多租户是一个侵入性很强的功能。在某些私有化部署场景下,客户可能只需要单租户模式。因此,我们需要一个“总闸”。// 只有当配置文件中 yudao.tenant.enable=true 时,整个多租户模块才生效// matchIfMissing = true 表示默认开启// ... 组件注册逻辑通过,我们实现了“一套代码,两种模式(单/多租户)”的灵活切换。

#spring boot#架构#后端
Guava Cache 原理与实战

简单来说,Guava Cache 是一个全内存的、线程安全的、类似于 Map 的本地缓存。如果你用过HashMap内存溢出:Map 无限制增长,最终导致 OOM。清理麻烦:需要自己写定时任务去清理过期数据。并发安全:需要自己处理复杂的锁机制。Guava Cache 就是为了解决这些问题而生的“增强版 Map”。自动过期:支持写入后多久过期、访问后多久过期。容量限制:支持最大缓存条数,基于 LRU(

#spring#java#后端
工作流 Flowable 全流程

前端封装请求参数,发送POST请求至。:指向具体的流程定义版本 ID(如),确保基于正确的版本发起。variables:将表单业务数据封装为键值对 Map。"Fkkgmkfa...": "看病", // Key为表单设计时生成的随机字段ID。

#spring boot#java#后端
Spring Boot :如何高性能地在 Filter 中获取响应体(Response Body)

创建一个实现了的类,用于“窃听”并备份结果。@Override// 优化:只拦截返回类型为标准通用结果(CommonResult)的接口// 避免干扰 Swagger、文件下载等接口@OverrideClass<?// 【核心动作】// 仅仅是把对象的引用放到了 Request 作用域中// 开销极低(Map.put 操作),没有流的读写,没有序列化// 原封不动返回 body,让 Spring

#spring boot#后端#java
Spring Boot :彻底解决 HttpServletRequest 输入流只能读取一次的问题

当 Tomcat 接收到 HTTP 请求时,Request Body 的数据存在于操作系统的 TCP 接收缓冲区或 Tomcat 的内部缓冲区中。中,然后伪造一个新的 Request 对象,当后续组件索要流时,始终返回一个新的、基于内存数组的流。接下来,我们需要一个 Filter,将原始的 Request 替换为我们的 Wrapper。我们需要拦截原始请求,将流中的数据全部读取出来暂存在。类,实现

#spring boot#后端#java
    共 38 条
  • 1
  • 2
  • 3
  • 4
  • 请选择