- 博客(669)
- 收藏
- 关注
原创 SpringSecurity将认证信息存入安全上下文
Spring Security 通过其核心组件 SecurityContextHolder 管理认证信息的存储和访问。认证信息存储的组件结构:SecurityContextHolder:作为安全上下文的持有者,默认使用 ThreadLocal 存储当前线程的 SecurityContext,确保不同线程间的上下文隔离。SecurityContext:包含当前用户的认证信息,核心属性为 Authentication 对象。
2025-04-29 06:39:02
240
原创 SpringCloud基于Eureka和Feign实现一个微服务系统
Spring Cloud 是基于 Spring Boot 的 微服务开发全栈解决方案,通过集成多种开源组件,提供分布式系统构建所需的服务治理、配置管理、容错机制等核心能力,简化微服务架构的复杂性。其核心目标是实现服务间的高效协同与弹性伸缩,支撑企业级云原生应用开发。Spring Cloud 通过标准化组件与灵活架构设计,将微服务落地的技术门槛显著降低,成为企业构建分布式系统的首选框架。其核心价值在于整合开源生态能力,提供一站式解决方案,助力开发者聚焦业务逻辑而非底层技术细节。
2025-04-25 17:35:25
957
原创 SpringCloud搭建Eureka注册中心
Eureka 是 Netflix 开源的 服务注册与发现框架,后被 Spring Cloud 集成为核心组件,用于解决微服务架构中服务治理问题。其核心目标是通过动态管理服务实例信息,实现服务间的透明通信与负载均衡。Eureka 通过简洁的 Server-Client 模型,结合心跳、缓存、自我保护等机制,为分布式系统提供了高可用、弹性的服务治理能力,是 Spring Cloud 微服务生态的核心基石。
2025-04-25 16:07:47
954
原创 SpringBoot整合POI实现Excel文件的导出与导入
Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格式文件(如 Excel、Word、PowerPoint、Visio 等)而设计,支持 Office 97-2016 版本的文件操作。其名称源于“Poor Obfuscation Implementation”(简洁版的模糊实现)的首字母缩写。Apache POI 功能全面,覆盖 Office 文件的全生命周期操作。社区活跃,文档丰富,适用于复杂场景(如:模板替换、动态生成报表)。
2025-04-15 20:06:07
1105
原创 Vue使用axios实现:上传文件、下载文件
Axios 提供了一些方便的方法来上传文件,包括使用 FormData、设置 Content-Type 为 multipart/form-data 等。文件上传是将本地计算机中的文件发送到服务器的过程。在前端开发中,通常使用 <input type="file"> 元素来实现文件选择功能。用户通过点击这个元素,选择需要上传的文件。然后,前端代码将选中的文件传递给后端服务器。
2025-04-14 20:18:57
502
原创 Java中String、Array、List的相互转换工具类
在 Java 语言中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象。String 类是不可变(final)的,对 String 类的任何改变,都是返回一个新的 String类对象。数组是具有相同数据类型的一组数据的集合。数组中的每个元素具有相同的数据类型。在 Java 中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组等。
2025-04-06 20:39:47
643
原创 Java数组
数组是具有相同数据类型的一组数据的集合。例如,球类的集合——足球、篮球、羽毛球等;电器集合——电视机、洗衣机、电风扇等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在 Java 中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组等。
2025-04-06 18:02:30
783
原创 Java中的String,StringBuilder,StringBuffer区别
本文详细解析了 Java中 String,StringBuilder 和 StringBuffer 的区别,主要从运行速度和线程安全两个方面进行了对比。String适用于少量字符串操作,StringBuilder适用于单线程大量操作,StringBuffer适合多线程大量操作。
2025-04-02 16:42:31
343
原创 Java中String字符串的常用方法
在 Java 语言中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象。String 类是不可变(final)的,对 String 类的任何改变,都是返回一个新的 String类对象。这样的话把 String 类的引用传递给一个方法,该方法对 String 的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似。Java 的 String 通过不可变性设计保障安全性与效率,但其操作需注意对象复用及性能优化。开发者应掌握常量池机制、常用方法及不可变特性,合理选择拼接策略以提升代
2025-04-02 16:18:46
277
原创 JavaScript数组Array的使用:添加、删除、排序、遍历、互转
数组是存储于一个连续空间且具有相同数据类型的元素集合。可以把数组看作一张单行表格,该表格的每一个单元格都可以存储一个数据,而且各单元格中存储的数据类型可以不同。这些单元格被称为数组元素,每个数组元素都有一个索引号,通过索引号可以方便地引用数组元素。数组是 JavaScript 中唯一用来存储和操作有序数据集的数据结果。数组是 JavaScript 中十分常用的一种数据类型。数组提供了一种快速、方便地管理一组相关数据的方法,是 JavaScript 程序设计的重要内容。通过数组可以对大量性质相同的数据进行存储
2025-04-01 18:57:55
903
原创 Window对象的常用属性和方法
Window 对象代表打开的浏览器窗口,通过 Window 对象,可以控制窗口的大小和位置、由窗口弹出的对话框、打开与关闭窗口,还可以控制窗口上是否显示地址栏、工具栏和状态等栏目。对于窗口中的内容,Window 对象可以控制是否重载网页、返回上一个文档或前进到下一个文档。在框架方面,Window 对象可以处理框架与框架之间的关系,并通过这种关系在一个框架中处理另外一个框架的文档。Window 对象还是所有其他对象的顶级对象,通过对 Window 对象的子对象进行操作,可以实现更多的动态效果。
2025-03-31 19:26:19
896
原创 JavaScript弹出框的使用:对话框、确认框、提示框、弹窗操作
Window 对象代表一个浏览器窗口或标签页,是浏览器对象模型(BOM)的核心对象。在浏览器环境中,Window 是 JavaScript 的全局对象。全局变量和函数均为 Window 对象的属性和方法。对话框(dialog)是响应用户某种需求而弹出的页面。打开窗口可以使用 Window 对象的 open() 方法。利用 open() 方法可以打开一个新的窗口,并在窗口中装载指定 URL 地址的页面,还可以指定新窗口的大小及窗口中可用的选项,并且可以为打开的窗口定义一个名称。
2025-03-31 17:36:15
818
原创 Document对象的常用属性和方法:getElementById()、getElementsByName()、createElement()方法
Document 对象代表浏览器窗口中的文档,该对象是 Window 对象的子对象。由于 Window 对象是 DOM 对象模型中的默认对象,因此其方法和子对象不需要使用 Window 来引用。通过 Document 对象可以访问 HTML 文档中的任何 HTML 标记,并可以动态地改变 HTML 标记中的内容,如表单、图像、表格和超链接等。Document 对象在 JavaScript 1.0 版本中就已经存在,在随后的版本中又增加了几个属性和方法。
2025-03-29 19:02:19
1561
原创 CSS样式大全
CSS(Cascading Style Sheets,层叠样式表)是一种用于定义 HTML/XML 文档视觉样式的标记语言,其核心功能是通过规则控制网页元素的布局、颜色、字体等显示效果。通过选择器与样式规则分离网页内容与表现形式,实现结构与样式的解耦。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。
2025-03-27 21:04:38
449
原创 JavaScript时间戳的使用
在 JavaScript 中,时间戳(Timestamp)通常指自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来的毫秒数。时间戳(timestamp)是一个能够表示一份数据在某个特定时间点已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。它广泛应用于数据库、计算机系统、文件系统、软件以及通信等领域,用于确保数据的完整性和一致性,以及追踪数据的变化。
2025-03-27 16:41:44
891
原创 Vue动态绑定:文本框、单选按钮、下拉列表、多选按钮
在 Web 应用中,通过表单可以实现输入文本、选择选项和提交数据等功能。在 Vue.js 中,通过 v-model 指令可以对象表单元素进行双向数据绑定,在修改表单值的同时,Vue 实例中对应的属性值也会随之更新,反之亦然。在程序设计中,循环控制是变化最丰富的技术。Vue.js 提供了列表渲染的功能,可将数组或对象中的数据循环渲染到 DOM 中。在 Vue.js 中,列表渲染使用的是 v-for 指令,其效果类似于 JavaScript 中的遍历。
2025-03-25 19:17:40
443
原创 Vue动态添加或删除DOM元素:购物车实例
在 Vue 中实现动态添加或删除 DOM 元素,主要通过响应式数据绑定结合列表渲染和条件渲染实现。可以使用动态列表渲染(v-for指令),通过维护响应式数组控制 DOM 元素的增删。使用 v-for 和数组来控制元素的动态渲染,通过维护一个数组,然后利用 v-for 循环来生成 DOM 元素。当添加或删除时,只需要修改数组的长度或者元素,Vue 的响应式系统会自动更新 DOM。这是 Vue 推荐的做法,因为它充分利用了数据驱动的特性,避免直接操作 DOM。
2025-03-25 17:33:04
483
原创 Jackson实现JSON数据的合并
Jackson 库实现 JSON 数据的合并,可以采用基于树模型的深度合并(递归策略),可以保留两个 JSON 的所有层级数据,避免覆盖冲突。在实际开发中,Jackson 功能丰富、安全可靠并且具有比较好的兼容性,这让程序开发人员可以很方便地实现 JavaBean 和以 “键 : 值” 结构保存的 JSON 数据的相互转换。
2025-03-24 19:53:27
355
原创 Jackson使用ArrayNode对象实现JSON列表数据(二):增、删、改、查
Jackson 库中的 ArrayNode 数组节点类是用于表示 JSON 数组的可变节点类,继承自 JsonNode,专为动态构建和操作 JSON 数组设计。支持动态添加、删除数组元素,与只读的 JsonNode 形成对比,可存储混合类型元素(如字符串、数值、嵌套对象或其他数组),常与 ObjectNode 配合构建复杂 JSON 结构。ArrayNode 数组节点类也是 JsonNode 中的一个常用子类,甚至 JsonNode 提供的个别方法就是专门为 ArrayNode 数组节点设计的。
2025-03-24 18:07:06
1083
原创 Jackson使用ObjectNode对象实现JSON对象数据(一):增、删、改、查
Jackson 库中的 ObjectNode 对象节点类是操作 JSON 对象的核心类,可实现动态的增删改查操作。ObjectNode 对象节点是 JsonNode 中比较常用的一个子类。如果以 “键 : 值” 结果保存的 JSON 数据中的某个节点也是一个以 “键 : 值” 结构保存的 JSON 数据,那么这个节点就用 ObjectNode 表示。
2025-03-23 17:11:20
1107
原创 Jackson的核心类与API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode
Jackson 不仅是一个基于 Java 语言的、开源的 JSON 解析库,也是 Spring Boot 默认使用的 JSON 解析库。为什么 Spring Boot 会默认使用 Jackson 呢?这是因为在 spring-boot-starter-web 依赖包中已经依赖了 Jackson 的依赖包(即:jackson-databind)。在实际开发中,Jackson 功能丰富、安全可靠并且具有比较好的兼容性。
2025-03-23 15:23:51
972
原创 Java中迭代器(Iterator)的使用
在 Java 中,迭代器(Iterator)是集合框架中用于遍历集合元素的一种机制。它提供了一种统一的方式来访问集合中的元素,而不需要了解底层集合的具体实现细节。迭代器是一个对象,用于按顺序访问集合中的元素。它提供了访问集合元素的标准方法,而不必暴露集合的内部结构。迭代器位于 java.util 包中,是一个接口。迭代器简化了集合的遍历过程,使得代码更加简洁和易于维护。
2025-03-15 09:56:02
250
原创 SpringBoot使用Logback日志框架与综合实例
Spring Boot 支持很多种日志框架。通常情况下,这些日志框架是由一个日志抽象层和一个日志实现层搭建而成的。日志抽象层是为记录日志提供的一套标准且规范的框架,其作用在于为记录日志提供接口。日志实现层是由日志抽象层实现的框架。Spring Boot 默认使用的日志抽象层是 Slf4j,默认使用的日志实现层是 Logback 框架。Slf4j 是当下主流的日志抽象层。
2025-03-12 17:51:03
970
原创 SpringBoot设置过滤器(Filter)或拦截器(Interceptor)的执行顺序:@Order注解、setOrder()方法
在 Spring Boot 中,你可以使用 @Order 注解来设置过滤器(Filter)或拦截器(Interceptor)在过滤器链或拦截器链中的执行顺序。@Order 注解是 Spring 框架提供的一个用于定义组件加载或执行顺序的注解。它可以应用于任何由 Spring 容器管理的组件上,当你需要在多个组件之间定义一个明确的加载或执行顺序时,可以使用 @Order 注解。它接受一个整型值作为参数,该值越小,组件的优先级越高,即越早被加载或执行。
2025-03-10 18:44:34
746
原创 SpringBoot使用OncePerRequestFilter过滤器:确保一次请求只通过一次过滤器
OncePerRequestFilter 是 Spring 框架提供的一种过滤器实现,确保外部请求只执行一次过滤逻辑,避免服务器内部 forward 导致的重复过滤。因此,不需要担心在请求处理过程中过滤器会被多次调用。特别需要注意的是,在使用 Spring Security 过程中,Spring Security 中的 Filter 被加载了两次或多次的情况;如果想解决某些过滤器 Filter 只执行一次,可以采用SpringBoot官网提供的此方案。
2025-03-10 17:50:59
319
原创 SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释
Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压缩响应信息等)。在 Web 服务器中部署了过滤器以后,不仅客户端发送的请求会经过过滤器的处理,而且请求在发送到目标资源处理以后,请求的回应信息也同样要经历过滤器。
2025-03-08 20:04:21
1081
原创 SpringBoot获取YAML配置文件中的属性值(二):使用Environment环境组件读取值
Spring Boot 提供的 Environment 接口提供了一种机制,使得应用程序能够轻松地获取和操作配置属性。这些属性通常来源于不同的渠道,如命令行参数、系统环境变量、配置文件(如:application.properties 或 application.yml )等,这些配置文件可以放置在不同的位置,如项目的classpath、文件系统或外部存储等。Environment 允许为不同的环境配置不同的 Profile,例如:dev(开发)、test(测试)、prod(生产)等。
2025-03-04 17:40:30
357
原创 MyBatis-Plus注解配置:@TableName、@TableId、@TableField
MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 提供了一系列注解,用于简化数据库表与实体类之间的映射关系。以下是 @TableName、@TableId 和 @TableField 这三个常用注解的配置和使用说明。@TableName 该注解用于指定实体类对应的数据库表名。当实体类名与数据库表名不一致,或者实体类名不是数据库表名的驼峰写法时,您需要使用这个注解来明确指定表名。
2025-02-28 17:20:23
1082
原创 SpringBoot整合SpringSecurity、MyBatis-Plus综合实例:认证、授权
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是 Spring 项目组中用来提供安全认证服务的框架,能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案。Spring Security 的前身是 Acegi Security。它是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。Spring Security 采用了 AOP(面向切面编程)思想,并基于 Servlet 过滤器实现。
2025-02-27 17:45:56
1094
原创 SpringSecurity获取当前登录用户信息
在 Spring Security 中,获取当前登录用户的信息通常涉及到使用 SecurityContextHolder 来获取安全上下文,然后从中提取当前认证信息。以下是一些常用的方法来获取当前登录用户的信息。SecurityContextHolder 是 Spring Security 中的一个核心组件,它用于存储当前安全下文(Securty Context)的详细信息。这些信息包括当前已认证的用户、用户的授予权限以及其他相关的安全细节。
2025-02-25 19:14:59
510
原创 SpringSecurity处理器:登录成功处理器、登录失败处理器、无权限处理器、注销成功处理器
在 Spring Security 中,你可以通过实现特定的接口或扩展某些类来自定义各种处理器,例如登录成功处理器、登录失败处理器、无权限处理器和登出成功处理器。以下是每种处理器的具体实现方法:登录成功处理器,需要实现 AuthenticationSuccessHandler 接口,当登录认证成功后会执行调用。登录失败处理器,需要实现 AuthenticationFailureHandler 接口,当登录认证失败后会执行调用。
2025-02-24 17:08:56
482
原创 SpringSecurity设置白名单
白名单(Whitelist)是一个安全术语,它指的是一个明确的列表或集合,其中包含了被系统、程序或网络明确授权允许访问或执行的对象。这些对象可以是用户、IP地址、电子邮件地址、域名、文件、进程或其他任何实体。在 Spring Security 中设置白名单(即允许某些特定的URL路径无需认证即可访问)是一项常见的需求。你可以通过配置 WebSecurityConfigurerAdapter 来实现这一点。以下是一个示例,展示了如何配置 Spring Security 以允许特定的 URL 路径无需认证即
2025-02-22 17:03:00
481
原创 SpringSecurity基于注解实现方法级别授权:@PreAuthorize、@PostAuthorize、@Secured
方法调用授权的含义很明确,与 HTTP 端点级别的授权机制一样,人们可以用它来确定某个请求是否具有调用方法的权限。这里可以分成两种情况:如果是在方法调用之前进行授权管理,则称为预授权(PreAuthorization);如果是在方法执行完之后确定是否可以访问方法返回的结构,则称为后授权(PostAuthorization)。在 Spring Security 中,@PreAuthorize 注解是一种用于方法级别授权的强大工具。它允许你在方法执行之前进行权限检查,从而确保只有具备相应权限的用户才能调用该方法
2025-02-22 16:31:00
999
原创 SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权限。Spring Security 中所采用的授权模型也是由用户、角色和权限组成的。Spring Security 实现配置方法控制访问权限很简单,只需要使用基于 HttpSecurity 对象提供的一组工具方法就能实现复杂场景下的访问控制。
2025-02-19 15:25:16
1241
原创 SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器
Spring Security 作为一个功能完备的安全性框架,一方面提供用于完成加密操作的 PasswordEncoder 组件,另一方面提供一个可以在应用程序中独立使用的密码模块。在 Spring Security 中,PasswordEncoder 接口代表的是一种密码编码器,用于指定密码的具体加密方式,以及如何在给定的一段加密字符串与明文之间完成匹配校验。尽管 Spring Security 提供了丰富的 PasswordEncoder 接口的实现类,但我们也可以通过自定义接口来设计满足自身需求。
2025-02-05 18:57:03
1131
原创 Java使用BCrypt强散列算法实现:加密、校验
BCrypt 加密是一种安全且高效的密码存储与验证方法,它结合了密码哈希函数和加密算法。BCrypt 加密基于哈希函数,并使用一个密码和一个随机生成的盐值作为输入,生成一个固定长度的密码哈希值。这个哈希值在每次密码输入时都会重新生成,且会随着盐值的改变而改变。这种机制确保了即使是相同的密码,在每次加密时也会生成不同的哈希值,从而有效增强了安全性。Bcrypt 生成的密文是 60 位的,而 MD5 的是 32 位的。
2025-02-05 15:42:28
484
原创 SpringSecurity实现自定义用户认证方案
Spring Security 实现自定义用户认证方案可以根据具体需求和业务场景进行设计和实施,满足不同的安全需求和业务需求。这种灵活性使得认证机制能够更好地适应各种复杂的环境和变化。通过自定义认证方案,可以更好地控制和管理用户的访问权限,确保数据和应用程序的安全性和可靠性。Spring Security 所做的工作只是把常见的、符合一般业务场景的实现方法进行抽象并嵌入框架中,开发人员完全可以自定义用户认证方案。
2025-01-20 18:30:32
898
原创 SpringSecurity中的过滤器链与自定义过滤器
Spring Security 中的过滤器链(Filter Chain)是一个核心的概念,它定义了一系列过滤器,这些过滤器按照特定的顺序处理HTTP请求,并负责执行各种安全任务,如身份验证、授权、CSRF 保护等。过滤器链是由多个过滤器组成的链式结构,请求依次经过每个过滤器,每个过滤器可以决定是否继续传递请求。此外,Spring Security 还允许开发人员自定义过滤器,并将其添加到安全过滤器链中。这使得可以根据特定的业务需求,扩展安全过滤器链的功能。
2024-12-30 17:31:04
1138
原创 SpringSecurity使用过滤器实现图形验证码
图形验证码是一种用于区分用户是人类还是计算机程序的自动化测试。它通常用于防止自动化软件(如机器人或爬虫程序)进行恶意操作,如滥用在线服务、暴力破解密码或进行垃圾邮件发送等。图形验证码的工作原理基于一个假设:计算机程序难以自动识别和处理复杂的图像或模式,而人类则相对容易。因此,图形验证码通常包含扭曲的文字、数字、图像或它们的组合,这些元素对人类来说相对容易辨认,但对计算机程序来说则非常困难。本文将介绍Spring Boot 整合 Spring Security 实现图形验证码功能,
2024-12-28 19:58:20
1036
1
原创 Vue3.0使用JavaScript脚本实现Vue Router路由:页面跳转、获取URL参数
在单页 Web 应用中,整个项目只有一个 HTML 文件,不同视图(组件的模块)的内容都是在同一个页面中渲染的。当用户切换页面时,页面之前的跳转都是在浏览器端完成的,这时就需要使用前端路由。路由实际上就是一种映射关系。例如,多个选项卡之间的切换就可以使用路由功能来实现。在切换时,根据鼠标的点击事件显示不同的页面内容,这相当于事件和事件处理程序之间的映射关系。
2024-12-18 17:43:12
635
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人