Java开发
文章平均质量分 65
catoop
性格开朗外向,积极进取充满热情,为人诚恳做事用心,爱好手工实践和大自然。有较强的自学意识创新意识和进取精神。喜欢分享技术收获,虽然是一个知识的搬运工,但对技术孜孜不倦,什么都想搞什么都想做的劲头小伙,善于灵活的运用技术优雅的解决问题,善于表达乐于沟通,一切只因心中那殿力量努力向上。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于 JWT/JWE 的跨系统安全数据透传方案
本文提出了一种基于JWT的安全微服务集成方案,针对企业级系统中平台侧与业务侧分离场景下的数据传递需求。通过JWE加密或JWS签名技术,结合20-30秒超短有效期的设计,实现了敏感数据的机密性和完整性保护。方案采用302重定向避免浏览器缓存问题,并通过无状态验证机制降低系统复杂度。该方案在保证安全性的同时,兼顾了系统性能和架构简洁性,适用于不同安全等级的业务场景。实施时需注意服务器时钟同步和URL长度限制等关键点。原创 2026-01-15 20:46:33 · 853 阅读 · 0 评论 -
网站安全加固:优化 Nginx 安全头配置
本文介绍了如何通过Nginx配置安全头提升网站安全性。主要内容包括:1) 通过301重定向强制HTTPS访问;2) 配置关键安全头如HSTS、Referrer-Policy、X-Content-Type-Options等;3) 详细说明各安全头的作用和配置参数;4) 区分HTTP/HTTPS站点适用的不同安全头。这些配置能有效防御XSS、点击劫持等攻击,增强网站整体安全性。原创 2025-12-25 16:16:29 · 1080 阅读 · 0 评论 -
双Token认证+Cookie方案详细流程
本文提出了一种基于Spring Boot的双Token认证方案,结合Access Token和Refresh Token实现安全访问控制。方案采用Cookie机制传递令牌,通过Path属性限制Cookie发送范围:Access Token仅限特定路径(如文件下载接口),Refresh Token限定在刷新接口使用,Session ID作为会话标识全局携带。系统数据库存储Token哈希值而非明文,确保安全性。完整流程包括用户登录、Token生成与存储、Cookie设置及自动刷新机制,通过JWT校验和会话绑定实原创 2025-12-17 16:53:38 · 623 阅读 · 0 评论 -
安全的 Token 刷新机制:Refresh Token 轮换与权限实时同步
该方案通过服务端为每个登录行为生成唯一的 sessionId,并将 refreshToken 绑定到特定的 Cookie path 上,实现不同标签页使用不同的会话凭证,从而达到完全隔离的效果。该方案通过服务端生成 sessionId 的方式,确保了会话ID的唯一性和可靠性。每次登录行为都会产生一个全新的独立会话,结合 Cookie path 隔离机制,实现了完美的多标签页会话管理。相比前端生成会话ID的方案,这种服务端生成的方式更加安全可靠,是多标签页会话管理的最佳实践。会话级管理。原创 2025-12-15 18:43:15 · 1838 阅读 · 0 评论 -
TaskDecorator 与 CompositeTaskDecorator 装饰器设计模式解析
TaskDecorator与CompositeTaskDecorator的组合设计,展现了设计模式在解决实际问题中的强大能力。这种设计不仅体现了装饰器模式的动态扩展特性,还通过组合模式实现了多装饰器的统一管理。通过接口定义规范,确保扩展性通过组合实现灵活配置,而非硬编码通过引用嵌套而非重复执行,保证核心逻辑只执行一次通过链式调用,实现功能的有序执行通过洋葱模型,确保前置后置逻辑的正确顺序这种设计模式在现代软件架构中具有广泛的适用性,值得我们在日常开发中深入理解和灵活运用。(END)原创 2025-11-26 14:31:15 · 519 阅读 · 0 评论 -
Windows 安装 SDKMAN 详细教程(JDK 多版本管理)
通过以上步骤,你已成功在 Windows 系统中借助 Git Bash 安装并配置了 SDKMAN,并掌握其管理 JDK 的基本命令。未来你可以用它来轻松管理多版本的 Java、Groovy、Scala 等多种开发工具,提升开发效率。希望本教程对你有帮助。如需进一步学习 SDKMAN 的高级使用方法,欢迎参考其官方文档。(END)原创 2025-11-24 17:34:38 · 3303 阅读 · 3 评论 -
基于对称算法的文件下载安全方案设计
本文提出一种基于国密SM4加密的文件下载安全方案,解决传统方案中文件ID暴露导致的撞库批量下载风险。方案核心是通过SM4对称加密生成包含文件ID、用户ID和sessionId的令牌,替代直接暴露文件ID。下载时解密验证用户身份与会话一致性,确保请求合法性。该方案具有防撞库、高效加密、严格权限控制和会话验证等优势,在保障安全性的同时保持系统性能,适用于各类Web应用系统的文件下载场景。原创 2025-11-05 19:30:21 · 1165 阅读 · 0 评论 -
国密算法SM2、SM3、SM4功能特性对比
维度SM2SM3SM4功能数字签名、密钥交换数据完整性校验数据加密密钥公私钥对(256位)无共享密钥(128位)速度慢快中是否可逆是(需私钥)否是对应国际算法RSA / ECCSHA-256AES-128核心价值身份认证、信任建立防篡改保密传输✅结论:SM2、SM3、SM4各司其职:•SM2管“身份”和“信任”,•SM3管“完整性”,•SM4管“机密性”,三者共同构成中国商用密码体系的核心,实现自主可控的信息安全。(END)原创 2025-09-26 09:08:44 · 1890 阅读 · 0 评论 -
Netty入门指南:构建Socket客户端与服务端的核心组件解析
组件作用Bootstrap启动客户端/服务端多线程事件循环,处理I/OChannel网络连接的抽象业务逻辑处理器处理器链,实现责任链模式ByteBuf高效的数据缓冲区Future异步结果通知机制掌握这些核心概念后,你就可以基于Netty构建稳定高效的网络通信程序。建议从简单的Echo服务入手,逐步尝试自定义协议、编解码、心跳机制等高级功能。📚 进一步学习建议:• 学习Netty的编解码框架(Codec• 实现心跳机制与空闲检测(• 掌握Netty的内存池与零拷贝机制。原创 2025-09-22 11:38:21 · 1077 阅读 · 0 评论 -
Java 日志中 Marker 的深入解析与应用
Marker是SLF4J(以及Logback、Log4j 2)提供的一个接口,它本质上是一个命名对象。你可以把它想象成一个可以附加到日志语句上的"标签"或"戳记"。核心思想:有时,仅凭日志级别(如DEBUG, INFO, ERROR)不足以描述一条日志事件的特定属性或类别。Marker就是为了满足这种分类需求而设计的。通常,我们会将Marker定义为常量。// 定义Marker常量 public class AppConstants {原创 2025-09-01 13:55:10 · 1425 阅读 · 0 评论 -
JConsole 使用详解:深入探索 JMX MBean 管理
JConsole 是 Java Development Kit (JDK) 自带的一款图形化监控工具,用于监控 Java 应用程序的性能和资源消耗情况。它基于 Java Management Extensions (JMX) 技术,可以连接到本地或远程的 Java 虚拟机 (JVM),提供对内存、线程、类加载和 MBean 等的实时监控。启动上述程序启动 JConsole 并连接到该程序在 MBean 标签页中找到域展开后可以看到type=HelloMBean。原创 2025-08-13 15:56:59 · 1627 阅读 · 0 评论 -
基于进程PID的本地JMX端口检测技术详解
监控JVM的运行状态获取应用的配置信息动态调用应用中的方法实时查看应用指标基于进程PID的本地JMX端口检测技术提供了一种优雅、可靠的解决方案,用于获取运行中Java应用的信息。实时性:获取的是应用运行时的实际状态可靠性:直接从JVM内部获取数据,避免解析错误扩展性:可以获取各种配置信息和运行时状态标准化:基于JMX标准,具有良好的兼容性通过本文的介绍,相信你已经掌握了这项技术的核心原理和实现方法。在实际项目中,你可以根据具体需求,扩展更多的MBean调用,实现更丰富的监控和管理功能。原创 2025-08-13 15:56:09 · 426 阅读 · 0 评论 -
基于进程PID的本地JMX端口检测技术详解
监控JVM的运行状态获取应用的配置信息动态调用应用中的方法实时查看应用指标基于进程PID的本地JMX端口检测技术提供了一种优雅、可靠的解决方案,用于获取运行中Java应用的信息。实时性:获取的是应用运行时的实际状态可靠性:直接从JVM内部获取数据,避免解析错误扩展性:可以获取各种配置信息和运行时状态标准化:基于JMX标准,具有良好的兼容性通过本文的介绍,相信你已经掌握了这项技术的核心原理和实现方法。在实际项目中,你可以根据具体需求,扩展更多的MBean调用,实现更丰富的监控和管理功能。原创 2025-08-13 15:18:16 · 1077 阅读 · 0 评论 -
一次意外的压测:IDEA 的 -XX:TieredStopAtLevel=1 竟让性能下降 10 倍
是 IDEA 为调试优化的“便利”,但会严重牺牲运行性能。本地压测 ≠ 真实性能,开发模式下的参数可能掩盖真实瓶颈。性能测试时,务必确保环境与生产尽可能一致。一次偶然的压测,暴露了 IDE 背后的“性能陷阱”。下次,别再让调试便利,误导了你的性能判断。(END)原创 2025-08-07 19:11:37 · 793 阅读 · 0 评论 -
MethodHandle 、Java 反射、Spring ReflectionUtils 对比报告
性能优秀:接近直接调用,远优于反射标准API:无需额外依赖,兼容性好易于使用:API简洁,学习成本低功能完整:支持所有常用场景对于大多数应用场景,MethodHandle 是最佳选择。只有在特殊需求下(如需要方法拦截、极致性能要求、私有成员访问等),才考虑其他方案。最终建议:一般场景:使用 MethodHandleSpring项目:考虑 Spring ReflectionUtils(特别是需要私有访问时)需要私有访问:使用反射或 Spring ReflectionUtils需要极致性能。原创 2025-06-25 10:12:49 · 754 阅读 · 0 评论 -
Java 反射 vs MethodHandle 详细对比示例
【代码】Java 反射 vs MethodHandle 详细对比示例。原创 2025-06-25 09:47:55 · 301 阅读 · 0 评论 -
在 FreeMarker 模板中使用 Java 静态方法:以 StringUtils 为例
在使用 FreeMarker 渲染模板时,我们常常希望能调用一些 Java 工具类方法,特别是像 Apache Commons Lang 提供的这类字符串处理函数。本文将介绍如何通过将静态方法注入到模板中,实现类似的用法。原创 2025-06-20 16:28:35 · 383 阅读 · 0 评论 -
工作流 BPMN 中的 adHocSubProcess 任务节点
是 BPMN 中的一种特殊子流程,它允许在流程中包含一组没有严格顺序约束的活动。内部活动可以以任意顺序执行活动是可选的(可以跳过)支持运行时动态添加新任务完成时机由业务条件而非流程结构决定执行路径无法预先确定需要根据中间结果动态调整业务专家需要灵活决策空间在使用前务必评估业务需求——过度使用会导致流程难以监控,适合的才是最好的!(END)原创 2025-06-09 09:40:03 · 711 阅读 · 0 评论 -
ByteBuddy入门:静态方法增强实战
ByteBuddy是一个强大的Java字节码操作和代码生成库,它提供了简单易用的API来创建和修改Java类。本文将通过一个实际的例子,展示如何使用ByteBuddy实现静态方法的运行时增强。通过这个示例,我们展示了如何使用ByteBuddy实现静态方法的运行时增强。ByteBuddy提供了强大而灵活的API,使得字节码操作变得简单直观。在实际应用中,我们可以根据需求扩展这个基础示例,实现更复杂的功能增强。原创 2025-05-29 20:17:16 · 723 阅读 · 0 评论 -
idea 插件开发自动发布到 nexus 私服中(脚本实例)
该 build.gradle.kts 文件示例展示了如何配置一个 IntelliJ 插件开发项目,并定义了两个自定义任务:updatePluginsXml 和 uploadPluginToNexus。updatePluginsXml 用于自动修改 Nexus 中的配置文件,而 uploadPluginToNexus 则用于将打包后的插件 ZIP 文件上传到 Nexus 私服。原创 2025-05-20 20:16:06 · 771 阅读 · 0 评论 -
Swagger 3.0 中注解详细示例
Swagger 3.0 提供了丰富的注解来详细描述 API 的请求和响应。以下是一个使用 @Operation、@Parameter、@RequestBody 和 @ApiResponse 注解的示例,展示了如何设置请求头、请求参数、路径变量、请求体和响应体。代码中未使用 DTO 对象,而是使用 Map 来传递参数和响应。通过 @Parameter 注解,可以定义查询参数、路径变量和请求头。@RequestBody 注解用于描述请求体的结构,而 @ApiResponse 注解则用于定义成功的响应内容。原创 2025-05-09 17:37:29 · 1661 阅读 · 0 评论 -
JSON Schema 示例详解(基于 Draft 2020-12)
通过上述示例和解释,我们深入了解了如何使用Draft 2020-12规范来创建复杂且详细的JSON Schema。这不仅有助于确保数据的一致性和正确性,还能提高API和服务间交互的安全性和可靠性。希望这份指南能帮助您更好地理解和应用JSON Schema。JSON Schema是一种用于描述和验证JSON数据结构的强大工具。规范,提供一个详尽的JSON Schema示例,并深入讲解其中涉及的各种属性和特性。值得注意的是,除了字符串类型外,数值类型并不直接支持正则表达式或类似的模式匹配方式。原创 2025-04-23 10:24:44 · 1439 阅读 · 0 评论 -
使用 json schema 校验 json 字符串
是一种用于描述 json 数据结构的语言,它可以用来定义 [json 数据](https://so.csdn.net/so/search?q=json 数据&spm=1001.2101.3001.7020)的类型、格式、约束等信息。本身是一个也是json数据总的来说如果需要进行json数据校验,推荐使用json-schema-validator,它的校验结果更加简洁,使用起来更加方便。在官方的对比文档中也可以看出来json-schema-validator的功能更加全面,性能也更好,可扩展性也是非常强的。转载 2025-04-22 14:02:34 · 402 阅读 · 0 评论 -
IntelliJ 插件开发 jcef 调试窗口关闭后浏览器页面被销毁的问题
在使用 IntelliJ IDEA 开发插件并集成 JCEF (Java Chromium Embedded Framework) 作为浏览器组件时,开发者可能会遇到这样一个问题:当通过browser实例调用方法打开的浏览器调试窗口被关闭后,原本的browser页面也会随之被销毁。这显然不是我们期望的行为,因为理想情况下,调试工具的关闭不应影响到主页面的正常运行。原创 2025-04-01 16:01:39 · 580 阅读 · 0 评论 -
批量读取pdf发票中二维码的信息
【代码】批量读取pdf发票中二维码的信息。原创 2025-01-02 14:20:15 · 881 阅读 · 0 评论 -
使用EasyExcel处理多Sheet与格式化:单元格边框线及列宽自动调整
在处理大量数据并将其导出为Excel文件时,Java开发者经常会面临如何高效且美观地组织信息的问题。本文将基于EasyExcel库,展示一个简短的代码示例,以说明如何创建包含多个工作表(Sheets)的Excel文件,并设置单元格边框线以及实现列宽的自动调整。原创 2025-01-02 10:59:09 · 1965 阅读 · 0 评论 -
用作 License 识别用户系统唯一标识ID 的参考方法
【代码】用作 License 识别用户系统唯一标识ID 的参考方法。原创 2024-12-26 13:02:42 · 303 阅读 · 0 评论 -
idea 禁用/关闭 sonarlint 后台自动分析(默认开启可能会引起idea卡顿)
idea 的 SonarLint 插件安装后,idea的使用经常出现卡顿,并且运行内存使用非常高,出现的原因之一就可能是 SonarLint 正在进行自动扫描,所以一般情况我们可以选择关闭 SonarLint 自动扫描功能,在需要对代码进行规范检查时再手动进行。关闭自动触发分析的截图如下,默认情况下是勾选上开启的。原创 2024-12-25 16:59:18 · 2131 阅读 · 0 评论 -
使用 google autoService 解决:服务配置文件不正确, 或构造处理程序对象 javax.annotation.processing.Processor
要想解决问题,所以我们只能先删除这个文件,在 maven 编译成功后再把文件放回去打包。但是你会发现,这样很难受,每次修改代码编译打包都要进行这样的操作。我们之间使用 google-autoService 库来自动生成这个文件,只需要给我们的目标类添加一个。只需要一个注解即可,这样在 maven 编译打包后就会自动生成services下面对应的文件和内容了。如果我们创建并配置了这个服务发现文件,那么在我们编译时,它会自动被。加载时我们的这个类还没有被编译为 class,它就会报错。原创 2024-12-20 15:59:16 · 666 阅读 · 0 评论 -
git SSL certificate problem: unable to get local issuer certificate
Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构(Certification Authority,CA)签发。如果Git客户端无法找到或验证本地签发者证书,就会出现或类似的错误。该问题一般发生在 Windows 操作系统中。我出现这个问题,是因为我的证书是自己签发的,但是我已经将根证书安装导入到系统的受信认根证书中。原创 2024-12-12 20:22:17 · 1327 阅读 · 0 评论 -
基于 Nginx 缓存文件的方案
基于 Nginx 缓存文件的方案如下图所示,下文给出对应的配置。原创 2024-12-05 17:08:24 · 353 阅读 · 0 评论 -
Java 响应式编程 Lambda、Funcation、Stream 知识要点总结
Java 响应式编程 Lambda、Funcation、Stream 知识要点总结。原创 2024-11-30 23:09:56 · 387 阅读 · 0 评论 -
Java Stream reduce 函数,聚合数据
是 Stream 的一个聚合方法,它可以把一个 Stream 的所有元素按照自定义聚合逻辑,聚合成一个结果。如下方法签名所示,带有三个参数的 reduce 是单线程流和多线程并行流都可以使用的。如下是一个逻辑处理收集复杂一些的示例,综合演示了。原创 2024-11-30 22:42:47 · 682 阅读 · 0 评论 -
命令行参数解析,封装类CommandLineParser、Arguments
类参考自第三方jline组件库,因为项目只需要这一个功能,所以不希望依赖整个jline,故自己整理了一个完整的独立的类。实际应用中,你会发现参数的值可能被双引号包裹,也可能被单引号包裹,值中也可以包含转译的双引号、空格、单引号,等因素。正确的转换结果,line1 应该是6长度的数组,line2 应该是47长度的数组。方法接收2个参数,一个是定义好的各个具体参数的集合,一个是选项字符串参数数组。如下解析类,是一个完整的独立的类,可以直接拷贝到项目中使用,能完成可靠的转换。Apache 组件库。原创 2024-11-23 11:09:28 · 604 阅读 · 0 评论 -
Spring Batch 表结构
Spring Batch 表结构。原创 2024-11-22 14:26:31 · 1327 阅读 · 0 评论 -
对比 MyBatis 批处理 BATCH 模式与 INSERT INTO ... SELECT ... UNION ALL 进行批量插入
在开发中,我们经常需要批量插入大量数据。不同的批量插入方法有不同的优缺点,适用于不同的场景。MyBatis 的批处理模式。使用进行批量插入。MyBatis 批处理模式数据量适中:适用于数据量不是特别大,但需要频繁插入、更新或删除的场景。需要灵活的 SQL 操作:需要支持多种类型的 SQL 操作,如插入、更新和删除。需要细粒度的错误处理:需要在批处理完成后检查每个操作的结果,以便发现和处理错误。大数据量插入:适用于需要一次性插入大量数据的场景,尤其是数据量非常大时。性能要求高。原创 2024-11-22 09:55:01 · 2320 阅读 · 0 评论 -
Spring Boot 集成 Kettle
Kettle 最初由 Matt Casters 开发,是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集,使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性,帮助企业高效地处理大规模数据集成任务。原创 2024-11-16 21:20:11 · 4123 阅读 · 0 评论 -
使用 jlink 自定义 Java 运行时环境
Jlink 是一个 Java 命令行工具,用于生成自定义 Java 运行时环境(JRE)。您可以使用自定义 JRE 来运行 Java 应用程序。使用 jlink,您可以创建一个仅包含相关类文件的自定义运行时环境。您可以使用jlink工具从非模块化应用程序创建自定义 Java 运行时环境(JRE)。先决条件安装 红帽构建的 OpenJDK 11。注意:建议您始终使用可移植 tarball作为 jlink 的运行时基础。原创 2024-11-12 14:43:21 · 1388 阅读 · 0 评论 -
使用Java内存级方式 和 Redis Lua 脚本方式实现滑动窗口限流
ConcurrentSkipListMap 的主要特性就是进行查找、插入和删除操作时更高效,内部是基于跳表结构实现的。可以保证Key的顺序。ConcurrentLinkedQueue 的顾名思义就是队列,查找效率相对较低,但是内存占用比 ConcurrentSkipListMap 少一点。顺序严格安装入队的顺序。原创 2024-10-31 10:25:36 · 921 阅读 · 0 评论 -
自定义有序 Map 类 OrderedMap
Java 没有内置有序的 Map,有的业务场景我们希望我们的Map,保持们存入数据的顺序。可以在后续提取元素时,简单的提取 第一个元素、最后一个元素、指定key的上一个、指定key的下一个 等等,满足 Map + LinkedList 的同时特性,本文封装了一个 OrderedMap 类,需要的可以参考使用。原创 2024-10-15 17:53:36 · 691 阅读 · 0 评论
分享