- 博客(710)
- 资源 (2)
- 收藏
- 关注
原创 Spring Security OAuth2.0(12):分布式系统认证方案
本文介绍了Spring Security OAuth2.0在分布式系统认证中的应用方案。分布式系统具有分布性、伸缩性、共享性和开放性特点,需要统一的认证授权机制。通过对比基于session和基于token的认证方式,选择采用token认证方案,因其更适合统一认证机制、支持第三方应用接入且减轻服务端压力。该方案采用OAuth2.0开放协议,实现客户端、一方应用和三方应用的一致认证流程,满足分布式系统的认证需求。
2026-03-24 22:43:03
334
原创 Spring Security OAuth2.0(11):授权
Spring Security授权流程详解 摘要:本文详细介绍了Spring Security的授权流程和工作原理。授权分为web授权(URL拦截)和方法授权(方法拦截)两种方式,均通过AccessDecisionManager进行决策。核心流程包括:1)用户访问受保护资源时触发FilterSecurityInterceptor拦截;2)通过SecurityMetadataSource获取资源所需权限;3)AccessDecisionManager根据用户权限和资源要求进行投票决策。文中还提供了数据库表结构
2026-03-15 00:18:54
400
原创 Spring Security OAuth2.0(10):登出
摘要:Spring Security默认提供/logout退出功能,同时支持自定义配置。开发者可通过logout()方法修改退出路径(如/custom-logout)、设置重定向地址(如/login)和清除Session/Cookie。还支持添加LogoutHandler实现退出前业务逻辑(如令牌失效),以及LogoutSuccessHandler定制退出响应(如返回JSON)。需注意CSRF保护和并发会话管理,确保安全退出。常见问题包括Token未失效或重定向异常,需检查上下文清理和请求参数配置。(150
2026-03-12 00:03:39
335
原创 Spring Security OAuth2.0(9):会话控制
Spring Security 提供了多种会话管理方式,包括会话创建策略(ALWAYS/IF_REQUIRED/NEVER/STATELESS)、会话固定保护(migrateSession/newSession/none)、并发会话控制(通过SessionRegistry限制登录数)以及会话超时配置。开发者可根据应用场景选择合适组合,如REST API推荐STATELESS+JWT,Web应用常用IF_REQUIRED+migrateSession。配置涉及HttpSecurity的sessionManag
2026-03-11 00:23:20
239
原创 Spring Security OAuth2.0(8):获取登录用户的身份信息
摘要:本文介绍了如何使用Spring Security获取当前登录用户的身份信息。通过SecurityContextHolder.getContext().getAuthentication()方法可以获取认证对象,从中提取用户名和权限信息。代码示例展示了如何实现一个获取用户名的工具方法,并处理匿名用户和不同类型主体对象的情况。最后通过测试流程演示了登录后访问受保护资源时获取用户信息的过程。
2026-03-10 23:59:13
60
原创 vscode 安装插件非常慢
部分插件依赖大量子模块(如语言服务器、库文件),下载时需递归解析版本兼容性,消耗额外时间。企业网络、学校网络或防火墙可能屏蔽或限制对境外服务器的访问,导致连接失败或重试。本地 DNS 可能返回非最优的 CDN 节点地址,导致路由绕行,增加解析时间。)下载插件,该服务器位于境外,国内用户直连时可能遭遇高延迟或限速。VSCode 默认从微软的扩展市场服务器(
2026-02-04 00:24:42
1099
1
原创 nacos更改配置值后,应用提示Refresh keys changed 但是注入的值没有发生变化
摘要:当Nacos配置变更后应用提示刷新但值未更新,主要涉及6个原因:1)缺少@RefreshScope注解;2)依赖缺失;3)配置不匹配;4)监听失效;5)Bean作用域问题;6)缓存机制。解决方案包括:添加注解、检查依赖、匹配配置、验证监听、清理缓存及检查权限。需注意Feign接口刷新、静态字段缓存等高级场景,在K8s环境中还需排除环境变量干扰。(148字)
2026-01-16 16:29:40
635
原创 springboot基础(85): validator验证器
自定义一个校验器,实现必须以xxx 开头。@Constraint(validatedBy = PrefixValidator.class) // 关联验证器String message() default "字符串必须以指定前缀开头";// 默认错误消息Class<?Class<?// 自定义开头前缀属性// 动态存储用户设置的开头字符串@Override// 初始化时获取注解参数@Override// 空值处理(根据业务需求决定是否允许null)
2026-01-12 16:46:52
720
1
原创 java: 警告: 源发行版 17 需要目标发行版 17
要解决“java: 无效的目标发行版: 17”错误,需从。五个维度系统性排查。若版本低于17,需安装JDK 17。确保与项目配置的JDK 17一致。
2026-01-06 15:33:39
2527
原创 freemarker 运行提示找不到IOException
确保 addr.ftl 文件位于 src/main/resources/templates/ 目录下,这样打包后会在 JAR 的 /templates 目录中。路径问题:WordUtils2.class.getResource(“/templates”).getPath() 在 JAR 包中无法正确获取模板目录路径。资源加载方式:setDirectoryForTemplateLoading() 方法不适用于 JAR 内部的资源加载。方案一:修改模板加载方式(推荐)方案三:确保模板文件在正确位置。
2025-12-30 22:39:20
198
1
原创 网页版预编译SQL转换工具
SQL预编译转换工具 该工具能够将预编译SQL语句与参数组合成可执行的SQL脚本,方便调试和查看。主要功能包括: 输入处理: 支持带类型参数(如xiaowang(String)) 也支持直接输入值(如123) 可混合输入不同类型参数 参数类型转换: 自动处理字符串、整型、日期和布尔值 正确转义特殊字符 输出选项: 提供SQL美化格式化功能 亦可选择原始输出 支持一键复制结果 工具基于sql-formatter.min.js插件实现,通过简单界面即可完成预编译SQL到可执行SQL的转换。
2025-11-14 17:30:13
376
原创 jqprint打印示例
jqprint打印插件使用指南 本文介绍了jqprint 0.3版插件的基本用法和版本兼容性解决方案。该插件基于jQuery框架开发,支持局部DOM内容打印,兼容主流浏览器并提供多种配置选项。示例代码展示了如何实现指定区域打印功能,并包含打印专用内容的处理。针对不同jQuery版本,文章分别给出了兼容性处理方案:低版本无需额外处理,高版本需引入jquery-migrate插件。最后提供了版本选择建议,传统项目推荐使用稳定成熟的0.3版,而现代项目则建议考虑其他替代方案。
2025-11-11 11:55:35
877
原创 手机端调试如何使用vConsole
vConsole是一款轻量级移动端H5调试工具,可在页面右下角生成悬浮控制台,方便查看日志、网络请求和设备信息。引入方式支持CDN和npm安装,通过初始化代码即可使用。调试面板包含日志、系统信息、网络监控等功能。常见问题包括面板不显示、网络请求无法监控等,可通过检查代码、清除缓存或升级版本解决。生产环境需移除vConsole以防信息泄露。替代方案包括Chrome远程调试、Eruda工具等。建议开发环境自动加载,真机测试,并做好安全隔离。
2025-09-23 16:41:00
1524
原创 iframe页面的子父方法调用
本文介绍了在Web开发中使用iframe嵌套页面时,父页面与子页面的交互方法。同源场景下可直接通过JavaScript访问对方的方法和变量;跨域时需使用postMessage进行安全通信。文章详细说明了同源和跨域情况下的具体实现方案,包括父页面调用iframe内方法、iframe调用父页面方法、消息发送与监听等,并提供了完整的代码示例。关键注意事项包括同源验证、加载时机处理、错误捕获和性能优化。通过合理运用这些技术,可以实现安全可靠的跨iframe交互。
2025-09-18 09:03:04
948
原创 FormData 如何添加元素
本文详细介绍了JavaScript中使用FormData对象动态添加表单元素的方法。核心内容包括:1)创建FormData对象的两种方式(绑定现有表单或创建空对象);2)使用append和set方法添加元素,前者允许重复字段,后者会覆盖同名字段;3)处理复杂数据类型如文件、Blob和JSON;4)遍历和发送数据。文章还对比了append与set的区别,并提供了注意事项,如文件路径处理、敏感数据保护和性能优化等,帮助开发者高效实现表单数据提交。
2025-09-15 17:24:21
680
原创 PDF文件可执行代码的检测
本文介绍了使用Java和Apache PDFBox库检测PDF文件中可执行代码的方法。通过分析PDF文本内容,可以识别包含"java"、"javascript"、"exe"、"bat"等关键词的可疑代码片段。代码实现了三种检测方式:1)检查文本内容中的危险关键词;2)分析PDF文档结构和COS对象;3)专门检测JavaScript脚本。检测过程涉及解析PDF页面内容、提取文本区域、分析文档对象结构等操作。该方案能有效发现PDF文
2025-09-10 15:19:14
446
原创 java生成横向表格和竖向表格
本文介绍了两种HTML表格生成方法:竖向表格和横向表格。竖向表格将键值对按列排列,每行可指定显示列数;横向表格采用标题行加数据行的传统布局。通过Java工具类HtmlTableUtil实现,分别提供toVerticalTableHtml()和toHorizontalTableHtml()方法。竖向表格适合展示键值对数据,横向表格适合多行数据展示。两种表格都采用统一样式:100%宽度、1px灰色边框和边框合并效果。
2025-09-10 15:14:48
328
原创 java 将pdf转图片
本文介绍了使用Java的PDFBox库将PDF文件转换为图片的方法。通过PDFRenderer类,可以加载PDF文档并将每页渲染为BufferedImage对象,然后使用ImageIO.write方法将图像保存为PNG或JPG格式。代码示例展示了如何设置DPI(144)来控制图片清晰度,并提供文件路径拼接、计时统计等功能。该方法适用于批量转换PDF页面的场景,转换速度与DPI设置相关。
2025-09-10 10:45:15
454
原创 apache poi 导出复杂的excel表格
Excel复杂表格导出实现方法 本文介绍了如何使用Apache POI库导出带有复杂格式的Excel表格。通过Java代码示例演示了如何创建包含合并单元格、边框样式、颜色填充等特性的表格。关键实现步骤包括: 创建HSSFWorkbook工作簿对象 设置单元格样式(边框、颜色、字体、对齐方式) 使用CellRangeAddress实现单元格合并 通过RegionUtil设置合并区域的边框样式 自动调整列宽 示例代码展示了从创建表格标题到填充数据的完整流程,特别适合需要导出统计报表等复杂格式的场景。实现依赖Ap
2025-09-10 10:40:52
275
原创 java控制台手动输入
这段Java代码演示了如何使用Scanner类从控制台获取用户输入。程序首先创建Scanner对象读取System.in输入流,然后通过System.out.print提示用户输入内容,使用scanner.next()获取输入字符串,最后用System.out.println输出用户输入的内容。这是一个简单的控制台交互示例。
2025-09-10 09:46:22
300
原创 lucene渲染未命中最匹配的关键词和内容
Lucene搜索时若未命中最佳匹配语句,可能是默认最大分析字符51200限制导致。解决方法是通过高亮显示设置更大的maxDocCharsToAnalyze值(如Integer.MAX_VALUE)覆盖全文内容,确保准确匹配。代码示例演示了如何配置高亮器,包括设置HTML格式化样式、片段长度和关键参数maxDocCharsToAnalyze,以提升大文本搜索精度。
2025-09-10 09:43:01
277
原创 js base64编码和解码解决中文乱码问题
Base64编码中文时出现乱码是因为未正确处理UTF-8编码。解决方案是:在编码前先用TextEncoder将中文转为UTF-8字节数组,再转换为二进制字符串进行Base64编码;解码时先用atob解码,将结果转为字节数组后,通过TextDecoder按UTF-8解码还原中文。JavaScript示例代码提供了完整的UTF-8与Base64互转实现,确保中文内容编码后能正确解码显示。
2025-09-10 09:22:22
451
原创 编写一个网页版的json差异比较工具(无需依赖)
本文介绍了一个纯HTML+JS实现的JSON差异对比工具,无需依赖第三方库。该工具提供两个文本输入框用于输入JSON数据,通过"比较差异"按钮可高亮显示两个JSON之间的差异。实现特点包括: 完全前端实现,无需后端支持 支持语法高亮和差异标记(新增、删除、修改) 提供交换JSON位置、清空等便捷功能 响应式设计,适配不同屏幕尺寸 包含颜色图例说明差异类型 工具使用简单直观,适合开发人员快速比较JSON数据结构差异,适用于API响应比对、配置变更检查等场景。
2025-09-10 09:14:09
412
原创 mybatis处理统计sql进度丢失问题
摘要: 在MyBatis中执行统计SQL时,可能出现进度丢失问题,导致结果异常。解决方法是对SUM函数结果进行精度控制,使用CAST将其转换为DECIMAL(20,6)格式,确保数值精度。示例SQL修改为:SELECT CAST(SUM(decimal_column) AS DECIMAL(20,6)) AS sum_value FROM your_table。
2025-09-10 09:06:45
284
原创 fastjson处理json顺序
Fastjson处理JSON顺序的解决方案包括:1.启用Feature.OrderedField特性或使用LinkedHashMap保持顺序;2.通过@JSONType(orders)或@JSONField(ordinal)注解显式控制字段顺序;3.全局配置关闭字母排序。需注意嵌套结构需逐层处理,有序模式可能影响性能,不同版本Fastjson行为可能有差异。综合使用特性配置、数据结构和注解可实现灵活的JSON顺序控制。
2025-09-10 08:56:32
1266
原创 java将doc文件转pdf
本文介绍了使用iTextPDF和POI库将DOC文件转换为PDF的Java实现方案。该方案通过HWPFDocument读取DOC文件内容,利用iTextPDF创建PDF文档并写入文本。主要依赖包括itextpdf、poi-ooxml等相关库。代码实现了文件转换功能,支持中文字体处理,但存在局限性:不支持复杂格式、图表和图片。测试用例展示了如何调用转换方法。该方案适用于简单的DOC转PDF需求,对于格式复杂的文档可能不适用。
2025-08-27 10:23:59
599
原创 使用reactor-rabbitmq库监听Rabbitmq
摘要: Reactor RabbitMQ 是基于 Project Reactor 的响应式 RabbitMQ 客户端,支持非阻塞、背压友好的消息处理,适用于高并发场景。核心特性包括响应式流(Flux/Mono)、自动背压管理和声明式配置。与 AMQP-Client 和 Spring AMQP 相比,它更适合响应式微服务架构,但需掌握 Reactor 编程模型。提供消息发送/接收、集群监听、手动/自动ACK及错误处理等能力,可通过 Maven 快速集成。示例代码展示了连接创建、消息收发及高级配置(如集群监听)
2025-07-04 17:12:34
954
原创 @Bean属性的destroyMethod解释
摘要:Spring 4.3+ 的 @Bean 默认使用 destroyMethod = "(inferred)",自动检测并调用 Bean 的 close() 或 shutdown() 方法进行销毁。适用于 CuratorFramework、JDBC 连接等资源管理,开发者无需显式配置。若需禁用自动推断,可设置 destroyMethod = "",或通过 @PreDestroy 自定义销毁逻辑。最佳实践建议对关键资源显式指定销毁方法以提高可读性,确保资源正确释放。(
2025-07-03 15:12:34
880
原创 RabbitMQ简单消息发送
本文介绍了使用RabbitMQ发送简单消息的实现方法。首先需要添加Spring Boot AMQP依赖,然后通过代码示例展示了如何建立连接、创建通道、声明队列以及发送消息。示例中包含了RabbitMQ的基本配置参数(地址、用户名、密码等),并详细说明了queueDeclare和basicPublish方法的参数含义。最后还展示了如何正确关闭通道和连接。该代码实现了一个完整的RabbitMQ消息发送流程,适合初学者快速上手使用RabbitMQ进行消息队列操作。
2025-07-01 15:07:54
483
原创 RabbitMQ简单消息监听和确认
RabbitMQ消息监听实现 摘要:本文介绍了使用Spring Boot监听RabbitMQ队列的简单方法。首先需要添加spring-boot-starter-amqp依赖,然后通过配置类实现消息监听功能。核心配置包括:1) 创建ConnectionFactory连接工厂;2) 配置SimpleMessageListenerContainer指定要监听的队列;3) 设置消息监听器处理接收到的消息。示例代码展示了如何监听queue1和queue2队列,并在收到消息时打印日志。这种方法适用于需要实时处理Rabb
2025-07-01 14:47:37
605
原创 zookeeper Curator(6):集群中的Follower和Observer
Zookeeper中的Observer节点不参与投票是为了优化集群性能与扩展性。Observer的核心作用是分担读请求负载,而非参与写入一致性维护。其设计考量包括:避免写入性能下降(投票需半数以上节点确认)、减少网络通信开销、防止脑裂风险、简化故障恢复流程。Observer适用于读多写少场景,通过异步同步数据提升读取吞吐量,同时不影响集群写入性能。这种设计在扩展性和一致性之间取得了平衡,使得Zookeeper更适合大规模分布式系统的需求。
2025-06-29 01:01:09
1270
原创 zookeeper Curator(5):集群架构和集群搭建
Zookeeper集群是一个由奇数节点(3/5/7)组成的分布式协调系统,采用Leader-Follower架构确保高可用性和数据一致性。核心机制包括ZAB协议的原子广播和崩溃恢复功能,保证写操作有序执行和数据最终一致。Leader选举基于EPOCH、ZXID和SID三级优先级规则触发。部署时需要配置服务器列表、端口和节点ID,通过心跳机制维持集群健康。优势在于强一致性和故障容忍,但存在写性能瓶颈和运维复杂度等挑战。Zookeeper广泛应用于配置管理、分布式锁等场景,是分布式系统的基础组件。
2025-06-29 00:57:47
706
原创 zookeeper Curator(4):分布式锁
摘要 分布式锁是解决分布式系统中跨JVM进程同步问题的关键技术。本文介绍了分布式锁的实现方式,包括基于缓存(如Redis)、Zookeeper和数据库(乐观锁、悲观锁)的方案。重点分析了Zookeeper分布式锁的原理,通过创建临时顺序节点和监听机制实现锁的获取与释放。此外,详细阐述了Curator提供的五种分布式锁API(如可重入锁、读写锁、信号量等)及其适用场景,并对比了各类锁的特性。最后以12306售票系统为例,演示了使用Curator的InterProcessMutex解决高并发下超卖问题的实践方案
2025-06-29 00:18:48
1159
原创 zookeeper Curator(1):认识zookeeper和操作命令
ZooKeeper是一个分布式的树形目录服务,作为Hadoop生态系统的核心协调组件,用于管理配置、分布式锁和集群。其数据模型采用层次化节点结构,支持持久化、临时、顺序等节点类型。安装过程包括下载解压、环境配置、启动服务等步骤,支持Linux和Windows平台。常用命令涵盖服务管理(启动/停止)、节点操作(创建/删除)、监控和集群管理。ZooKeeper通过临时节点和监听机制实现分布式协调,适用于构建高可靠的分布式系统。注意节点数据限制(1MB)和ACL权限控制等特性。
2025-06-28 23:22:25
1251
原创 zookeeper Curator(3):Watch事件监听
摘要:Zookeeper通过Watcher机制实现分布式协调服务,支持事件监听功能。Curator提供了三种监听方式:1) NodeCache监听单个节点变化;2) PathChildrenCache监听子节点变化;3) TreeCache结合前两者功能,监听节点及其所有子节点变化。每种方式都通过注册监听器实现事件响应,需要开启监听并保持程序运行。代码示例展示了如何创建监听器、注册事件处理器以及处理节点数据变化。这些功能简化了原生Zookeeper Watcher的使用,为分布式系统开发提供了便利的监听机制
2025-06-28 19:54:07
1027
原创 zookeeper Curator(2):Curator的节点操作
Curator 是Apache Zookeeper 的java 客户端库常见的Zookeeper Java API原生Java APIZkClientCuratorCurator 项目的目标是简化Zookeeper 客户端的使用。Curator 最初是Netfix 研发的,后来捐献给了Apache基金会,目前属于 Apache顶级项目。
2025-06-28 18:06:22
762
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅