ErgouTree菜谱之糖醋排骨
ErgouTree...
Spring Security part6—Spring Security的默认配置与过滤器链的自动装配
Spring Security
默认配置源码分析
在 Spring Security
的官方文档中,说明了,它的配置为以下的默认实现。
12345678910111213141516@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 开启授权保护 .authorizeRequests(authorize -> authorize // 所有请求开启授权保护 .anyRequest() // 已经认证的请求会被自动授权 .authenticated() ) // 自动使用表单的授权方式,也就是自动生成的登入表单和登出表单 .formLogin(withDefaults()) // 使用基本授权方式 .httpBasic(withDefaults()); return...
Redis part2—Redis的基本命令和数据结构
Redis的常用命令
Redis 的两种命令
Redis 有两种命令
在 Windows 的 cmd 命令提示符中,可以在不进入 Redis
内部终端的情况下执行 Redis
命令,一般格式是:redis-cli.exe [options] command [arguments]
,options 是连接相关的参数,command 是具体的
Redis 命令,arguments 是命令的参数。
关于这个部分的命令,常用的比较少,下面说的常用命令都是基于第二种
一般情况下,我们在 Redis 内部终端输入命令,要进入 Redis
内部终端,你需要先连接到 Redis
服务器,打开命令提示符,redis-server.exe redis.conf即可启动
。如果 Redis 已经启动,和MySQL 一样,Redis 也需要新建连接,在 Windows
环境下,可以进入 Redis 安装目录,之后使用如下格式的命令新建链接,执行
redis-cli.exe -h 127.0.0.1 -p 6379 (默认端口是...
Maven常见报错分析和在开发中使用的小技巧
纯属想到想到想到哪里写哪里了,我单纯就是顺着我的思路写个杂谈,大伙看一乐就行
Maven笑传之藏藏bean
可能这个问题,大家不嗷嗷鼓捣
Maven,可能一辈子碰不上好几次,但是我还是要说说,要不然白摸索了))
一些通用的解决情况
孩子们,我是Maven,我又要找不到依赖了
实际上,有关于实际项目开发的过程中,因为 Maven
没法正常编译项目的原因,十个有八个会给你爆“找不到依赖”,这个问题藏的很深,而且那原因非常抽象,要么不知所云,要么你就不知道他为什么找不到。
如果你能通过先清除 IDEA
的缓存,然后经典三大步(clean,complie,package)就好了
那其实都不是问题,只是 Maven
在它能访问的仓库里,没找到你声明的依赖信息(或完整文件)
再说另一种情况
在线或离线网络环境中拷贝maven仓库到离线机器,使用maven加载项目,maven编译jar包找不到或者提示jar包信息不可用
然后我们进行了如下操作
常规 idea的 maven设置,确保
maven的版本, 配置文件保持一致,
maven仓库可用
刷新...
Redis part1—介绍NoSQL和缓存技术
介绍 Redis
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的
key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD
协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的
API。
Redis
通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted
sets)等类型。
Redis 简介
Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守...
JWT深度解析和在Spring框架中的实践落地
什么是 JWT
在现代Web开发中,身份认证与授权是保障系统安全的核心环节。随着前后端分离架构和微服务的普及,传统基于Session的认证方式面临着跨域、服务器存储压力大等问题。而
JWT(JSON Web
Token)作为一种轻量级、无状态的认证方案,凭借其自包含、可跨域、易扩展的特性,逐渐成为主流选择。
JWT全称为JSON Web Token,是基于RFC
7519标准定义的一种紧凑、自包含的令牌格式,用于在不同系统间安全地传递结构化的JSON数据。其核心价值在于“可验证性”
与“自包含性”:
可验证:通过数字签名确保数据未被篡改,接收方可通过签名反向验证令牌合法性;
自包含:令牌本身携带用户身份、权限、有效期等关键信息,无需频繁查询数据库或缓存;
跨平台兼容:基于JSON格式和Base64编码,支持所有主流编程语言和框架;
轻量灵活:体积远小于XML格式的令牌(如SAML),可通过URL、HTTP头或POST参数轻松传输。
跨域认证的问题
JSON Web Token(缩写...
Maven Lifecycle详解
Maven 构建生命周期
Maven
构建生命周期定义了一个项目构建跟发布的过程,包含三种标准生命周期:
clean:清理项目
default(或 build):核心构建流程
site:生成项目文档
img
每个生命周期由多个阶段(phase)组成,执行时按顺序运行,大概流程如下所示
img
Maven 生命周期的本质是
“预定义的阶段序列”,每个阶段对应特定的
“动作”,且阶段之间存在顺序依赖关系(执行后续阶段时,会自动执行所有前置阶段)。
clean 生命周期
clean
生命周期负责清理项目构建时候产生的临时文件和目录(主要是target/),这是它的唯一职责,避免旧文件干扰新构建,确保构建环境
“干净”
clean 生命周期的核心目标:删除项目根目录下的
target/ 文件夹,该文件夹是Maven
默认的构建输出目录,包含编译后的 class 文件、jar/war
包、测试报告等),以及其他临时文件(如 IDE 生成的缓存文件)
clean 生命周期是 Maven...
Spring Security part4—基于数据库的用户认证
基于数据库的用户认证
在前面我们讲了 Spring Security
基于内存的用户认证,但是实际开发中肯定不能做到基于内存隔这就验证,所以说生产开发中,更多使用的还是基于数据库的动态用户认证
Spring Security
基于数据库的用户验证是实际项目中最常用的认证方式,相比基于内存的验证,它能实现用户数据的持久化存储和动态管理。
实际配置理解基于数据库的用户认证
基于数据库的验证与基于内存的验证核心流程一致,都是通过 Spring
Security
的UserDetailsService接口加载用户信息,但数据来源从硬编码的内存数据改为数据库。
我们设计数据库表,通常需要两张核心表(用户表和角色表),采用多对多关系:
12345678910111213141516171819202122232425-- 用户表CREATE TABLE `sys_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(100)...
Spring Security part3—基于内存的用户认证及其源码分析
自定义内存用户验证的配置
用户验证方式
基于内存的用户认证虽然用的比较少,但是这东西简单而且便捷
而 Spring Security 进行用户验证的方式有如下几种,特点也如下
基于内存的验证(In-Memory Authentication)
特点:用户信息直接配置在内存中,无需数据库或其他存储介质
适用场景:快速原型开发、测试环境或简单应用
优势:配置简单,无需额外依赖
局限:用户信息无法动态修改,重启应用后变更会丢失
基于数据库的验证(JDBC Authentication)
特点:通过 JDBC
连接数据库,从数据库表中读取用户信息
适用场景:需要持久化存储用户信息的应用
优势:用户信息可动态管理,支持大量用户
配置:需定义用户表和权限表结构,通过
JdbcUserDetailsManager 实现
基于自定义 UserDetailsService 的验证
特点:通过实现...
Spring Security part2—从入门示例到底层配置的实际分析
Spring Security
示例——实现最简单的身份认证
首先,我们会编写一个只有最基本功能的 Spring Security
程序,只有最基本的最简单的身份验证,之后我们会随着学习不断完善这个项目
Spring Security 接入
引入依赖,我们引入 Spring Security 对应的starter
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>
引入依赖后,如果你直接就开始写,在尝试去访问接下来写的接口就会自动跳转到一个
Spring Security 的默认登陆页面,默认用户名是...
Spring Security part1—了解Spring Security框架
什么是 Spring Security 框架
其实没什么复杂的,顾名思义,Spring Security 框架就是 Spring
生态体系中专注于身份认证(Authentication)
和授权(Authorization)
的安全框架。它的核心功能是保护应用程序免受未授权访问,解决 “谁能访问”
以及 “能访问什么” 的问题。
简单来说,它可以实现,或者常见实现于如下场景:
用户登录验证(用户名密码、第三方登录等);
基于角色 / 权限的访问控制(如 “管理员才能删除数据”);
防护常见安全漏洞(如 CSRF、XSS、会话固定攻击等);
集成多种认证方式(如 OAuth2.0、JWT、LDAP 等)。
但是他不是一个独立的框架,他是 Spring 生态中的一个 组件?
大概可以这么理解,因为它尤其在 Spring Boot 和 Spring Cloud
中才能发挥重要作用。
与 Spring Boot 的关系可以这么理解
Spring Boot 的核心是 “自动配置”,简化框架集成。Spring Security 与
Spring...
Spring Cloud part21—RabbitMQ的进阶特性之消息的可靠性
RabbitMQ 的可靠性
RabbitMQ 的可靠性核心目标是
“确保消息不丢失、不重复消费,最终被正确处理”。其中,避免重复消费是可靠性的关键环节
——
即使因网络波动、系统故障等导致消息被重复投递,业务结果也需保持一致。
避免重复消费就是保证消息就算被重复发送也只被消费一次,这就是我们下面要讲的消息幂等性。
举个例子,我们在购物的时候,已经支付完成,但是消息没有正确的被消费,前端发送请求查询支付状态时,肯定是查询交易服务状态,会发现业务订单未支付,而用户自己知道已经支付成功,这就导致用户体验不一致。
生产者可靠性
生产者重试机制,通过在配置文件中添加相关配置打开重试机制
12345678910spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间 template: retry: enabled: true # 开启超时重试机制 initial-interval: 1000ms # 失败后的初始等待时间 multiplier: 1 # 失败后下次的等待时长倍数,下次等待时长 =...
Spring Cloud part20—RabbitMQ的进阶特性之数据隔离,死信队列和延迟队列
RabbitMQ 数据隔离
数据隔离隔离什么
这个其实在前面就应该说的,只不过我给忘记了
在 RabbitMQ
中,数据隔离是指通过技术手段确保不同业务、团队、环境或租户的消息数据相互独立,避免交叉干扰(如消息误消费、权限越界、资源抢占等)。这在多团队共享
RabbitMQ 集群、多租户系统或复杂业务场景中至关重要。
数据隔离一般会有如下隔离:
业务隔离:不同业务线(如电商的订单、支付、物流)的消息不混用,避免业务逻辑混乱。
环境隔离:开发、测试、生产环境的消息严格分离,防止测试数据污染生产。
权限隔离:限制不同角色对消息资源(交换机、队列等)的操作权限(如只读、读写、配置)。
资源隔离:防止某一业务过度占用集群资源(如连接数、队列长度),影响其他业务。
RabbitMQ
提供了多种机制实现数据隔离,核心是虚拟主机(vhost),配合权限控制、命名规范、资源限制等形成了完整的方案。
虚拟主机,Virtual Hosts,也就是右上角那个 vhost,它是 RabbitMQ
最核心的隔离单位
vhost 是 RabbitMQ...
















