自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你今天真好看呀

心若有所向往,何惧道阻且长

  • 博客(1440)
  • 收藏
  • 关注

原创 SpringSecurity Oauth2 - 访问令牌续期

在Spring Security OAuth2中,访问令牌的续期通常是通过使用**刷新令牌(Refresh Token)**来实现的。当访问令牌过期时,客户端可以使用之前获取的刷新令牌来获取新的访问令牌,而不需要再次请求用户认证。这个刷新令牌可以在访问令牌过期后用于请求新的访问令牌。② 当访问令牌过期时,客户端可以通过向授权服务器发送一个带有刷新令牌的请求来获取新的访问令牌。:当访问令牌过期时,客户端可以通过向授权服务器发送一个带有刷新令牌的请求来获取新的访问令牌。: 客户端密钥,用于验证客户端的身份。

2024-09-01 23:01:21 1148

原创 SpringSecurity Oauth2 - 密码认证获取访问令牌源码分析

① 过滤器链:在Spring Security的配置中,这些过滤器通常被配置在一个过滤器链中,这样每个请求都会经过这些过滤器,并根据请求路径、请求参数和方法来决定该请求需要经过哪些过滤器的处理。③ 令牌存储:这些过滤器通常会结合令牌存储(例如内存存储、数据库存储或JWT存储)一起使用,以管理访问令牌和刷新令牌的生成、存储、验证和撤销。在这个类中,你可以配置上述的过滤器,并指定授权路径、令牌路径、客户端详细信息服务、以及各种授权方式的处理逻辑。② 用户凭证验证:如果客户端验证通过,,确保客户端的合法性。

2024-09-01 22:15:07 1298

原创 SpringSecurity Oauth2 -密码模式完成身份认证 [自定义AuthenticationProvider]

TokenStore是 Spring Security OAuth2 中用于管理 OAuth2 令牌(Access Token 和 Refresh Token)的接口。它的主要作用是定义如何生成、存储、读取和删除令牌。TokenStore的具体实现类决定了令牌的存储方式,例如存储在内存中、数据库中、Redis 中,或以 JWT 的形式进行编码。TokenStore的主要作用:① 生成和存储令牌:当客户端请求令牌时,TokenStore。

2024-09-01 17:09:09 1076

原创 SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

TokenStore是 Spring Security OAuth2 中用于管理 OAuth2 令牌(Access Token 和 Refresh Token)的接口。它的主要作用是定义如何生成、存储、读取和删除令牌。TokenStore的具体实现类决定了令牌的存储方式,例如存储在内存中、数据库中、Redis 中,或以 JWT 的形式进行编码。TokenStore的主要作用:① 生成和存储令牌:当客户端请求令牌时,TokenStore。

2024-09-01 16:49:07 1131

原创 SpringSecurity Oauth2 - ClientCredentialsTokenEndpointFilter 源码认证clientId和clientSecret

最近打算再看下SpringSecurity Oauth2 身份认证和授权,搭建了一个项目准备自己重新把常见的认证方式再实现一遍,发现出现clientId和clientSecret认证错误的问题,于是追踪源码,发现是client_id写成了client-id。

2024-09-01 16:22:54 409

原创 分布式 - 消息队列Kafka:项目中kafka配置文件和命令行操作

参数用于指定 Kafka 集群中的 ZooKeeper 服务的地址。这个地址在kafka的配置文件config/server.properties 的 zookeeper.connect=kafka-zookeeper 属性中指定。属性存在,使用它的值作为broker列表的连接地址和端口。① kafka-0 的配置文件 server.properties。③ kafka-2 的配置文件 server.properties。② kafka-1的配置文件 server.properties。

2024-07-29 21:58:36 595 1

原创 MongoDB - 集合方法 db.collection.find()

参数确定匹配文档中返回哪些字段。方法限制结果集中的文档数量。方法对结果集中的文档排序。方法控制结果集的起点。

2024-07-28 22:01:48 360

原创 MongoDB - 聚合操作符 $eq、$gte、$in、$sum、$avg

gt 比较两个值并返回:true(当第一个值大于第二个值时),false(当第一个值小于或者等于第二个值时)$in 返回一个布尔值,它可表示指定的值是否在数组中。以下聚合操作查看每个文档中的。数组,并确定是否存在字符串。

2024-07-28 17:42:14 449

原创 MongoDB - 比较查询操作符$eq | 数组查询操作符 $eleMatch

操作符匹配包含数组字段的文档,该字段至少有一个元素与所有指定的查询条件匹配。操作符匹配字段值等于指定值的文档。运算符等同于下面的形式,但。是正则表达式的情况除外。

2024-07-27 22:18:55 268

原创 MongoDB - 游标方法 count()、limit()、pretty()、sort()

在排序参数中指定要排序的一个或多个字段,并指定值。以分别指定升序或降序排序。

2024-07-27 13:46:21 260

原创 MongoDB - 组合聚合阶段:$group、$match、$limit、$sort、$skip、$project、$count

match 根据条件筛选文档+ $group 根据单字段分组文档 + $project 重命名字段+ $sort 对文档按照唯一键排序。$match 根据条件筛选文档+ $group 根据单字段分组文档 + $match 筛选分组后的文档。$group 单字段分组 + $project 排除字段 + $project 重命名字段。根据工作中常见的业务需求,构造了一些场景来练习 mongodb 聚合阶段的使用。$group 根据单个字段对文档进行分组。

2024-07-26 23:37:23 409

原创 MongoDB - 聚合阶段 $count、$skip、$project

原因分析:在投影规范中,除_id字段外,不要在包含投影规范中使用排除操作。返回的文档可以指定包含字段、排除 _id 字段、添加新字段以及计算现有字段的值。字段包含在输出文档中。要在输出文档中包含输入文档中的任何其他字段,必须在。指定,如果您指定包含的字段在文档中并不存在,那么。将忽略该字段包含,同时不会将该字段添加到文档中。将带所请求字段的文档传递至管道中的下个阶段。阶段仅包含嵌入式文档中的。阶段输出文档中仅包含。阶段输出文档中仅包含。

2024-07-25 22:13:22 576

原创 MongoDB - 聚合阶段 $match、$sort、$limit

对包含重复值的字段进行排序时,可能会以任何顺序返回包含这些值的文档。如果需要一致的排序顺序,请在排序中至少纳入一个包含唯一值的字段。例如,在上面的表单中,文档首先按 field1 排序。接受排序依据的字段及相应排序顺序的文档。字段始终保证包含唯一值,因此在同一排序的多次执行中返回的排序顺序将始终相同。要实现一致的排序,可以在排序中添加一个仅包含唯一值的字段。阶段之前,请务必在排序中至少包含一个包含唯一值的字段。重复值的文档的顺序在多次执行同一排序中可能不相同。限制了聚合管道中的文档总数,因此早期的。

2024-07-24 23:51:48 1126

原创 MongoDB - 聚合阶段 $group 的使用

计算每个客户的订单数量和平均订单金额:group阶段根据 customerId 字段对订单文档进行分组,然后使用 $sum 操作符计算每个客户的订单数量,并使用 $avg 操作符计算每个客户的平均订单金额。计算每个客户的订单总额:group阶段根据 customerId 字段对订单文档进行分组,然后使用 sum 操作符计算每个客户的订单总额。$group 阶段用于对文档进行分组操作,输出是每个唯一组键的一个文档。阶段按日期对文档分组,并计算每组文档的总销售金额、平均数量和总数。

2024-07-24 01:44:55 1376

原创 MongoDB - 数组更新操作符:$、$[]、$pop、$pull、$push、$each、$sort、$slice、$position

"_id": 1,@Data@Id@Test// 构建查询条件// 构建更新操作// 执行更新操作。

2024-07-21 23:06:22 1044

原创 MongoDB - 字段更新操作符:$set、$unset、$inc、$currentDate、$rename

users 集合中 _id 为 1 的文档的 lastModified 字段将被设置为当前日期和时间,而 registrationDate 字段将被设置为当前日期,忽略时间部分。如果字段不存在,则创建该字段并设置初始值为指定的数值。:将字段的值设置为当前日期或当前时间戳,可以使用该操作符来更新现有字段或创建新字段。如果字段不存在,则创建该字段并设置初始值为指定的数值。查询 student 集合中name=Alice 的第一个文档:null。如果字段不存在,则创建该字段并设置初始值为指定的值。

2024-07-19 06:09:15 1130

原创 MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询

例如:db.collection.find({ $and: [ { condition1 }, { condition2 } ] })例如:db.collection.find({ $nor: [ { condition1 }, { condition2 } ] })例如:db.collection.find({ field: { $not: { condition } } })例如:db.collection.find({ field: { $lte: value } })

2024-07-12 10:09:52 1356

原创 MongoDB - 集合和文档的增删改查操作

其中,db.collection 是要新增文档的集合名称,key1、key2等是文档中的字段名称,而value1、value2等是对应字段的值。更新user集合中 age小于等于25的所有文档,将email设置为"hh@qq.com",将age设置为28。① 更新字段的值:更新user集合中与指定筛选器匹配的第一个文档,将name为"John"的age更新为22。连接词隐式地连接复合查询的子句,以便该查询选择集合中与所有条件匹配的文档。结合使用每个子句,以便查询选择集合中至少匹配一个条件的文档。

2024-07-10 10:42:43 1265

原创 Java8 - Optional 处理可能为空值的容器类

Optional.isPresent方法是Optional类的一个实例方法,用于判断Optional对象是否包含非空值,如果Optional对象包含非空值,则isPresent方法返回true;Optional.ofNullable 方法用于创建一个可能为空的Optional对象,如果传入的值为null,则会创建一个空的Optional对象。Optional.empty 方法用于创建一个空的Optional对象,该方法不接受任何参数,直接返回一个空的Optional对象。

2024-07-04 09:25:19 413 1

原创 Java8 - Stream API 处理集合数据

Java 8的Stream API提供了一种功能强大的方式来处理集合数据,以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作,如过滤、映射和归约,以简洁高效的方式进行处理。下面是Java 8 Stream API的一些关键特性和概念:① 创建流:您可以从各数据源创建流,如集合、数组或I/O通道。② 中间操作:Stream提供了一组中间操作,可以链接在一起对数据进行转换或过滤。

2024-07-03 15:01:52 1176 1

原创 报错:There is no supertype for types Int32, String because some of them are String/FixedString and som

这里之所以会报错是因为:type字段的类型在ioa_log表中为字符串类型,在icmp_log表中为int64类型。用于创建一些空的列,这些空的列在UNION ALL操作中被用于匹配两个SELECT语句的列,以便在结果集中创建一个完整的表格。UNION ALL与UNION的区别在于,UNION会去重,而UNION ALL不会去重。因此,如果需要合并两个结果集并保留重复的行,可以使用UNION ALL。注意,两个SELECT语句的列数必须相同,且对应的列的数据类型也必须相同。

2023-09-14 16:55:41 943

原创 实战 - Restful APi 格式规范

HTTP头里面的方法决定了动作后,后端实现也应该严格根据动作来,比如,GET请求不应该对数据造成任何更改,如此,我们对权限控制便非常方便,例如,如果是访客,我们可以只开放GET方法,而对于ADMIN,我们可以开放GET,POST,DELETE等方法。类似于面向对象以对象为中心,RESTful推崇以资源为中心,说不上绝对好,但的确会引导大家考虑资源本身,关注内聚性,关注权限,关注资源间关联。HTTP协议里面规定的东西很多,例如,缓存,压缩,代理,加密,穿透,等等,都已经让HTTP帮忙完成了,给很多实现减负。

2023-09-06 16:26:10 598

原创 Kubernetes 工作中常见命令总结

③ pod 文件的操作命令:命名空间为platform,pod的名称 incident-7c97d958cf-25ddr。② deployment 文件的操作命令:命名空间为platform,deployment的名称为incident。① configmap 文件的操作命令:命名空间为platform,configmap的名称为openapi。

2023-09-06 11:16:57 919

原创 分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,并加快了文件发送的速度。当tcp_nodelay设置为off时,表示禁用TCP_NODELAY选项,Nginx会等待一定时间或者缓冲区填满后再发送数据包,以减少网络传输的次数,提高效率。当tcp_nopush设置为on时,表示启用TCP_CORK选项,Nginx会等待缓冲区填满后再发送数据包,以减少网络传输的次数,提高效率。

2023-09-04 22:25:51 2071 1

原创 分布式 - 服务器Nginx:基础系列之Nginx静态资源配置指令server_name | listen | location | root | alias | index| error_page

hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。port 表示要监听的端口号。可以看到访问的是 /usr/local/nginx/html/b.jpg,即 alias 指定的路径,使用 alias 指定的路径替代了 location 指定的路径。

2023-09-03 18:17:53 1443

原创 分布式 - 服务器Nginx:基础系列之Nginx配置文件结构

我们知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。MIME类型是一种标准,用于指示在Web上传输的文件的类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。http {在上面的示例中,include 指令用于包含默认的 MIME Type 定义文件 mime.types,default_type 指令用于设置默认的 MIME Type。

2023-08-31 23:46:17 1145

原创 分布式 - 服务器Nginx:基础系列之Nginx简介 | 下载安装 | 启动和停止服务

Nginx是一个高性能的Web服务器,同时也是一个反向代理服务器。它最初是为了解决C10K问题而开发的,即如何让一个服务器同时处理成千上万个并发连接。Nginx采用了事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接,因此被广泛应用于高并发的Web应用场景中。此外,Nginx还可以作为POP3/SMTP/IMAP代理服务器,用于代理邮件服务器的请求和响应。这使得Nginx可以在一台服务器上同时运行多个服务,提高了服务器的利用率。

2023-08-29 23:03:17 1205

原创 MongoDB - 构造复杂查询条件执行查询

【代码】MongoDB - 构造复杂查询条件执行查询。

2023-08-29 15:14:14 1025

原创 分布式 - 服务器Nginx:一小时入门系列之 rewrite 指令

当请求的URL为 /old/1.txt 时,第一条 rewrite 规则将以 /old/ 开头的请求重写为以 /new/ 开头的请求,第二条 rewrite 规则将以 /new/ 开头的请求重写为以 /pages/ 开头的请求,最后接着匹配以 /pages/1.txt 结尾的请求,使用 return 指令返回状态码 200 和消息体 “this is rewrite test!rewrite 指令会导致请求的重新处理,因此可能会影响性能,因此,应该尽量避免在高并发场景下使用rewrite指令。

2023-08-26 22:05:38 703

原创 分布式 - 服务器Nginx:一小时入门系列之 return 指令

重定向是指在服务器端将用户的请求重定向到另一个URL地址,重定向的过程是通过向客户端发送一个HTTP响应,让客户端重新发送一个新的请求到重定向的URL地址。转发是指在服务器端将用户的请求转发到另一个资源进行处理,转发的过程是服务器内部完成的,对于客户端而言,它并不知道服务器进行了转发操作,因此客户端的URL地址不会发生变化。转发和重定向都是HTTP协议中常用的跳转方式,它们的作用都是将用户请求从一个URL地址转移到另一个URL地址,但它们的实现方式和效果略有不同。① 配置Nginx服务器监听8007端口。

2023-08-26 22:03:00 1412

原创 解决 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这是 mysql 初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题。

2023-08-26 15:48:31 5131

原创 分布式 - 服务器Nginx:一小时入门系列之TCP反向代理和负载均衡

http块用于配置 HTTP 服务器,包括监听端口、虚拟主机、反向代理、负载均衡、缓存等功能。TCP反向代理是指Nginx作为TCP服务器的代理服务器,接收客户端的TCP连接请求,然后将请求转发给后端的TCP服务器,最后将TCP服务器的响应返回给客户端。/etc/nginx/conf.d 目录是包含在 http 块中的,所以TCP负载均衡不能再配置在 /etc/nginx/conf.d 目录下的配置文件中了,需要和在 nginx.conf 中配置,并且和 http 块同级。

2023-08-26 14:11:22 2641

原创 解决无法远程连接MySQL服务的问题

③ 修改配置文件/etc/my.cnf,绑定IP设置为0.0.0.0,即接收任意地址的主机的连接,端口绑定3306。第一个root用户只能从本地主机连接,而第二个root用户可以从任何主机连接。② 检查防火墙有没有屏蔽掉3306端口。

2023-08-26 13:51:57 713

原创 分布式 - 服务器Nginx:一小时入门系列之HTTPS协议配置

HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来实现数据的加密和解密过程。这段配置文件的作用是将通过HTTPS协议访问"ruoyi.https"域名的请求转发到本地的8088端口。② 使用 OpenSSL 工具生成证书签名请求(CSR)的命令,在执行此命令之前,您需要确保已经生成了一个私钥文件 server.key。① 这个命令会生成一个2048位的 RSA 密钥对,并将私钥保存到名为 server.key 的文件中。

2023-08-25 21:13:10 949

原创 分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式

到目前为止,我们知道消息的拉取是根据poll()方法中的逻辑来处理的,这个poll()方法中的逻辑对于普通的开发人员而言是一个黑盒,无法精确地掌控其消费的起始位置。与消费者中的其他处理过程一样,自动提交也是在轮询循环中进行的。假设刚刚提交完一次消费位移,然后拉取一批消息进行消费,在下一次自动提交消费位移之前,消费者崩溃了,那么又得从上一次位移提交的地方重新开始消费,这样便发生了重复消费的现象(对于再均衡的情况同样适用,再均衡完成之后,接管分区的消费者将从最后一次提交的偏移量的位置开始读取消息)。

2023-08-18 11:42:11 2329

原创 分布式 - 消息队列Kafka:Kafka 消费者的消费位移

再考虑一种情况,当有新的消费者加入时,那么必然会有再均衡的动作,对于同一分区而言,它可能在再均衡动作之后分配给新的消费者,如果不持久化保存消费位移,那么这个新的消费者也无法知晓之前的消费位移。如下图,x 表示某一次拉取操作中此分区消息的最大偏移量,假设当前消费者已经消费了 x 位置的消息,那么我们就可以说消费者的消费位移为 x,不过当前消费者需要提交的消费位移并不是 x,而是 x+1,它表示下一条需要拉取的消息的位置。消费位移(偏移量)是指消费者在消费分区中的消息时,记录的已经消费的消息的位移。

2023-08-16 22:06:32 1800

原创 分布式 - 服务器Nginx:一小时入门系列之负载均衡

当访问 nginx 的 8003 端口时 ,请求会进入 8088 端口的 ruoyi-admin 服务,当填写完密码以后点击登录,这次请求会进入 8080 端口的 tomcat 服务,因此总是登录不成功。例如,当请求 nginx 的 8003 端口时,会将请求轮询转发给 tomcat 和 ruoyi-admin 两个后端服务器,即第1次请求会访问8080端口,第2次请求会访问8088端口,循环往复。请注意,使用轮循机制或最少连接的负载平衡,每个客户端的请求都可能分发到不同的服务器。

2023-08-15 23:16:22 874

原创 分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

当一个请求被代理到后端服务器时,如果该请求的响应已经被缓存,Nginx 会将缓存的响应返回给客户端,而不是将请求转发到后端服务器。通常情况下,来自后端服务器响应的第一部分存储在单独的缓冲区中,这个缓冲区存储的是相对较小的响应头部信息,大小通过 proxy_buffer_size 指令进行设置 ,建议将 proxy_buffer_size 设置为小于默认值。启用缓存后,nginx将响应保存在磁盘中,返回给客户端的数据首先从缓存中获取,这样子相同的请求不用每次都发送给后端服务器,减少到后端请求的数量。

2023-08-15 21:48:40 3932 2

原创 分布式 - 消息队列Kafka:Kafka 消费者消息消费与参数配置

01. 创建消费者在读取消息之前,需要先创建一个KafkaConsumer对象。创建KafkaConsumer对象与创建KafkaProducer对象非常相似——把想要传给消费者的属性放在Properties对象里。为简单起见,这里只提供4个必要的属性:bootstrap.servers、key.deserializer 和 value.deserializer。① bootstrap.servers 指定了连接Kafka集群的字符串。② key.deserializer 和 value.deser

2023-08-14 15:24:04 4327

原创 分布式 - 消息队列Kafka:Kafka消费者分区再均衡(Rebalance)

我们试想以下场景:提交位移之后的 3 秒发生了 Rebalance ,在 Rebalance 之后,所有 Consumer 从上一次提交的位移处继续消费,但该位移已经是 3 秒前的位移数据了,故在 Rebalance 发生前 3 秒消费的所有数据都要重新再消费一次。在协作再均衡中,消费者群组首领会通知所有消费者,它们将失去部分分区的所有权,然后消费者会停止读取这些分区,并放弃对它们的所有权。当一个消费者被关闭或发生崩溃时,它将离开群组,原本由它读取的分区将由群组里的其他消费者读取。

2023-08-12 22:52:20 2462

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除