- 博客(184)
- 资源 (3)
- 收藏
- 关注
原创 Flink 系列之十三 - Data Stream API的输出算子底层原理
了解了基本的原理,这里通过一个简单的案例来自定义一个Sink示例说明:将上游算子来的String数据,写入到minIO对象存储中。前提是已经部署一个minIO服务器,并创建flink-data桶代码参考:lesson06子模块1)在flink-study父项目中的pom引入minio的dependencyManagement版本管理-- 版本是8.5.2--> < version > ${minio.version} </ version > </ dependency >
2025-05-10 10:28:07
817
原创 Flink 系列之十二 - Data Stream API的输出算子
输出算子:顾名思义就是将数据流输出到外部的存储。跟输入算子一样,输出算子同样包括文件、kafka、数据库等等,包括之前一直在使用的print算子,其实它也是一个输出算子。这一部分Flink也是将其独立到Connector模块提供很好的规范和扩展性,其中Flink内置很多源算子,也支持扩展自定义的源算子。这里通过《Flink官方网站文档》可以实时看到已经支持哪些输出算子。下图为官方截图,到目前为止支持的输出算子,其中有sink字样的就是支持该外部系统输出:除了上面的Flink本身支持的算子之外,还可以在。
2025-05-10 10:27:42
617
原创 Flink 系列之十一 - Data Stream API的中间算子的底层原理及其自定义
看到在RichFunction下面除了原先Map、Fliter等类之外,还有许多ProcessXXXFunction或许XXXProcessFunction的实现抽象类,这些就是Flink为用户提供的自定义算子的抽象类。如果要自定义自己的算子,就可以通过实现这些抽象类来自定义,这些类根据不同流中使用不同Function。从其不同流的使用来看,可以总结出以下8大类调用的流说明实现方法DataStream这是普通DataStream流最基本的处理函数,使用process方法传入。
2025-05-09 09:25:28
481
原创 Flink 系列之十 - Data Stream API的中间算子:合流和分流
这一章学了Flink中间算子中的合流和分流的方法,至此算是将Flink中间算子的大部分常用的方法学了一遍,接下来一章将会是对其底层的实现原理以及自定义中间算子的操作进行讲解。
2025-05-09 09:24:52
620
原创 Flink 系列之九 - Data Stream API的中间算子:分区
当Flink提供以上几种分区的算子都无法满足用户的需求,这个时候可以通过自定义分区算子。在演示自定义之前,先来看看分区算子的底层原理。既然已经知道要使用partitionCustom,并实现和两个接口,那么接下来就能自己实现一个自定义demo。示例描述:假设是一个监听来自服务器cpu的日志,日志格式是“服务器id,cpu,时间”,按照服务器id的hash值作为key,去分配到下游算子/**
2025-05-07 08:54:34
1108
原创 Flink 系列之八 - Data Stream API的中间算子:转换和聚合
前面的聚合类算子都是Flink自身实现好的功能,如果min、max、sum方法都不满足用户要求,用户也可以重新实现符合自己聚合要求的算子,自定义聚合类算子,需要使用:reduce。其实去看min、max、sum、minBy和maxBy都是底层实现,都是使用reduce方法实现的。描述定义Reduce函数的基本接口。Reduce函数通过总是取两个元素并将它们合并为一个元素,将元素组组合为一个值。Reduce函数可以用于整个数据集,也可以用于分组数据集。
2025-05-07 08:54:12
940
原创 Flink 系列之七 - Data Stream API的源算子原理
接下来,使用一个简单示例,来演示如何自定义Source算子。在日常工作中,读取服务器日志并汇总到一个可视化平台供监控和分析是一个非常常见的场景。在这里假设一个场景:有一个服务器,在固定的目录下面会按照日期不断生成日志,假设每个5分钟生成一个日志文件,由于日志是不断产生,因此常见写日志的方法是正在写的日志都会是以tmp为后缀文件,写完的日志才会被命名为log为后缀。
2025-04-25 14:56:59
909
原创 Flink 系列之六 - Data Stream API的源算子
本章主要讲解Flink的源算子,并对其一些常见的源算子进行的演示。Flink框架有很好的扩展性,对于源算子,当然提供了用户自定义的方式,下一章,将讲解源算子原理,并通过一个自定义源算子案例来解剖Flink的源算子原理。
2025-04-25 14:56:13
983
原创 Flink 系列之五 - Data Stream API的执行环境
通过本章,对Data Stream API这一层API的使用步骤做了一次了解,并在讲述了执行环境相关内容,接下来将继续讲解Data Stream API的源算子、中间算子、输出算子以及执行函数相关内容。
2025-04-24 14:30:42
688
原创 Flink 系列之四 - 核心概念
本章针对Flink的核心概念做了一次全面的讲解,这一章对理解后面很多内容或者在实践中都非常重要,大家一定要理解好这些概念。接下来就进入Flink具体的相关API详细内容。
2025-04-24 14:30:07
607
原创 Flink 系列之三 - 集群模式
本章了解了Flink集群的部署方式以及其不同资源提供方式下的运行方式,同时通过剖解作业提交的整个流程,了解Flink集群不同组件的所负责的工作。至此,对Flink已经有了一个很全面的了解。接下来,将通过多方面细节探讨,更深入的了解Flink。
2025-04-23 14:17:51
551
原创 Flink 系列之二 - 集群和部署
本章我们通过Standalone方式部署了一个Flink集群,并通过2种不同方式进行提交任务。这样你就基本了解Flink在正式环境中是如何运行的。但是这些只是简单的皮毛,我们下一章通过了解部署模式、资源提供方式和提交底层原理,来更细致了解Flink的集群及原理。
2025-04-23 14:17:15
958
原创 Flink 系列之一 - 开篇
本章让大家从了解Flink的一些简单概念,到使用3个简单代码示例,最后通过代码的方式验证流处理和批处理,以及无界流和有界流的区别。这算是初步了解了Flink,虽然里面有很多代码可能看不懂,但是接下来的章节将会一一为你剖析。
2025-04-22 13:57:20
993
原创 基于Spring Security 6的OAuth2 系列之二十六 - 终章
至此,我们对Spring Security 6实现OAuth2的内容就介绍完了,当然还有很多内容没有介绍,不过相信通过这一系列,你应该已经掌握了底层原理了,自己就可以去看其它的功能。
2025-04-22 13:56:22
1431
原创 基于Spring Security 6的OAuth2 系列之二十五 -响应式编程之二
本章我们介绍了响应式编程实现资源服务器的搭建方式。至此,我们对Spring Security 6 实现OAuth2的全部内容就已经讲完了,下面还有最后一章,将以一个实际项目来结束。
2025-02-27 14:33:10
758
原创 基于Spring Security 6的OAuth2 系列之二十四 -响应式编程之一
响应式编程是一种编程范式,它允许程序组件以声明式的方式响应数据的变化。这种编程方式使得开发者能够更容易地构建复杂的异步数据流和事件驱动的应用程序。可能这么说对于理解这个很难,下面我通过一个示例,让你感受一下什么是响应式编程。如果你使用过java的Lambda编程方式,对于理解响应式编程就更容易一点。下面2段代码实现一样的效果,一个是使用java的Lambda表达式,一个是使用Project Reactor响应式编程框架,你先体会一下其编程风格,其实和java的Lambda表达式一样。
2025-02-26 16:21:07
673
原创 基于Spring Security 6的OAuth2 系列之二十三 - 高级特性--TLS客户端认证方法之二
本章我们介绍了如何使用证书对授权服务器的客户端进行认证。下一章,我们讲一种新的编程范式:响应式编程。在Spring Security中也采用了这种编程范式重新实现了一遍其框架,因此了解这一部分也很重要。
2025-02-26 16:20:28
929
原创 基于Spring Security 6的OAuth2 系列之二十二 - 高级特性--TLS客户端认证方法之一
到这里,我们已经通过Spring Security做了一次证书双向认证的过程。有了这一章为基础,那么对于OAuth2的授权服务器,其TLS客户端认证方式也是类似,下一章我们讲一下。
2025-02-25 15:53:45
1012
原创 基于Spring Security 6的OAuth2 系列之二十一 - 高级特性--自定义授权模式
本次场景,我们来模拟自定义通过手机短信方式进行授权。代码参考lesson15子模块,这里只是模拟,我们假如已有手机号码:13888888888。并接收到的验证码:9999我们在上一章的《系列之二十 - 高级特性–令牌交换(Token Exchange)》或者前面的《系列之十七 - 高级特性–设备授权码模式》中的底层源码解析就已经知道,它们都可以认为是一种新的授权码模式,因此重写一种授权方式必须实现和,当然,你还要定义自己的。
2025-02-25 15:52:30
981
原创 基于Spring Security 6的OAuth2 系列之二十 - 高级特性--令牌交换(Token Exchange)
令牌交换(Token Exchange)来自于RFC8693协议。OAuth 2.0 Token Exchange 是标准 OAuth 2.0 协议的扩展。它使客户端应用程序能够从充当安全令牌服务(Security Token ServiceSTS) 的授权服务器请求和获取安全令牌(例如访问令牌)。STS 是一项服务,负责验证提供给它的令牌并在响应中颁发新令牌,这使客户端应用程序能够为分布式环境中的资源获取适当的安全令牌。
2025-02-20 09:11:58
945
原创 基于Spring Security 6的OAuth2 系列之十九 - 高级特性--OIDC1.0协议之二
我们发现在访问/userinfo接口时,只返回一个用户名,如果我们想返回更多的信息,应该如何操作呢?现在我们知道其通过id_token里面的信息取获取的。第一种方法:自定义id_token,将信息放入id_token中,我们需要自定义OAuth2TokenGenerator。或许你存一些无关紧要的信息还是可以接受的,但是如果信息中包括个人隐私以及系统权限等信息,就会使得id_token暴露太多信息。如果想实现这个,参考官方的案例。
2025-02-18 16:53:36
962
原创 基于Spring Security 6的OAuth2 系列之十八 - 高级特性--OIDC1.0协议之一
本章简介了OIDC1.0协议,并使用Spring Security演示了一遍OIDC1.0协议的实现。下章我们将去窥探其原理。
2025-02-18 16:53:05
1174
原创 基于Spring Security 6的OAuth2 系列之十七 - 高级特性--设备授权码模式
本章我们对设备授权码模式进行了详细的讲解。下一章我们继续讲解OAuth2的新特性。
2025-02-17 09:19:44
1134
原创 基于Spring Security 6的OAuth2 系列之十六 - 高级特性--PKCE
本章我们了解了none情况下的认证模式,可以通过PKCE进行增强。其实PKCE不止是none认证方式,所有认证方式下都可以加入PKCE,但是PKCE只能用于授权码模式,不能用于客户端模式。下一章,我们将继续OAuth2.1未讲解的一个关键更新:设备授权码模式。
2025-02-17 09:18:28
1269
6
原创 基于Spring Security 6的OAuth2 系列之十五 - 高级特性--客户端认证方式
本章讲了授权服务器对客户端认证的几种不同方式及其原理,并使用代码演示一遍。下一章我们继续讲述这一部分内容,也就是none方式的客户端认证,但是会有一个新的扩展-PKCE扩展,这是OAuth2.1版本才有的,说明Spring Security 6 还是走在比较前面。
2025-02-12 09:10:16
1219
原创 基于Spring Security 6的OAuth2 系列之十四 - 资源服务器--自定义资源服务器
处理认证失败的异常:处理没有权限或者没有登录的异常我们从上一章知道资源服务器会去授权服务器请求得到JWT的公钥,或者配置某一个地方获取公钥。这里还有一种办法,就是本地公钥,可以通过自定义decoder方式,获取本地公钥,这样就可以不依赖其它服务。代码参考lesson08子模块1)新建lesson08子模块,复制和lesson07子模块一致2)在SecurityConfig配置下,配置自己加载本地的公钥@Beanhttp// userInfo接口需要SCOPE_profile权限。
2025-02-11 13:15:50
1036
原创 基于Spring Security 6的OAuth2 系列之十二 - 资源服务器--开篇
资源服务器是如何验证你的token呢?从官方文档上面看,默认会根据你配置的授权服务器地址,去读取以下3个接口:从其中获得jwtURL地址,然后通过该地址去获取token的验证密钥(关于资源服务器底层原理这部分我们在《系列之十三 - 资源服务器–底层原理》中再来了解)。这里我们先来看看,有时候因为安全性问题,授权服务器不会开启这些接口,因此需要我们自己提供一个接口给资源服务器获取Jwks,这个在官方文档中的jwk-set-uri配置可以自定义获取Jwks接口,下面我们就模拟这个过程。
2025-02-10 09:02:40
1010
原创 基于Spring Security 6的OAuth2 系列之十一 - 授权服务器--前后端分离授权服务器
至此,我们演示了一个前后端分离的授权服务器的。到目前为止,我们关于授权服务器的使用就告一段落,当然还有很多功能没有讲,这个在后面的系列会逐一讲解,下一章我们来看看资源服务器。
2025-02-10 09:02:04
1277
11
原创 基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token
本章我们讲解了刷新token的方式以及原理。到目前为止,我们已经对Spring Security实现的授权服务器有了比较深入的了解。下面我们将结合Spring Security,实现一个生产可用的前后端分离的授权服务器。
2025-02-03 15:05:58
1325
原创 基于Spring Security 6的OAuth2 系列之九 - 授权服务器--token的获取
我们从源码OAuth2AuthorizationServerJwtAutoConfiguration可以看到默认情况下是自动生成一个RSA非对称的加密,如下图:安全问题:我们知道密钥是经常需要轮换的,如果使用默认我们就无法定时轮换,当然重新启动就能切换集群问题:如果我们的授权服务器是一个集群,那么每个服务器的密钥都是不一样,无法实现集群效果因此我们只需要自定义jwkSource,就可以自己使用自己生成的RSA密钥。代码参考lesson05子模块。
2025-02-03 15:05:20
1407
原创 基于Spring Security 6的OAuth2 系列之八 - 授权服务器--Spring Authrization Server的基本原理
本章我们对Spring Authrization Server如何实现授权码模式以及自定义客户端信息进行源码解析,并了解了几个关键的Filter过滤器。有了这个基础,对接下来我们实现更为高级的授权服务器功能,并了解实现原理就变得更为容易。
2025-01-31 15:09:39
1578
原创 基于Spring Security 6的OAuth2 系列之七 - 授权服务器--自定义数据库客户端信息
之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0。无论是Spring Security的风格和以及OAuth2都做了较大改动,里面甚至将授权服务器模块都移除了,导致在配置同样功能时,花费了些时间研究新版本的底层原理,这里将一些学习经验分享给
2025-01-31 15:08:21
1740
原创 基于Spring Security 6的OAuth2 系列之六 - 授权服务器--自定义授权页面
之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0。无论是Spring Security的风格和以及OAuth2都做了较大改动,里面甚至将授权服务器模块都移除了,导致在配置同样功能时,花费了些时间研究新版本的底层原理,这里将一些学习经验分享给
2025-01-23 13:20:18
1196
原创 基于Spring Security 6的OAuth2 系列之五 - 授权服务器--开篇
代码参考lesson02子模块,其中该子模块有2个子模块,分别是:oauth-server和oauth-client,他们分别代表oauth的授权服务器和oauth的客户端。
2025-01-23 13:19:03
1188
原创 基于Spring Security 6的OAuth2 系列之四 - 客户端--oauth2-client底层原理
本章我们从底层原理分析了Spring Security默认配置OAuth2客户端的原理。至此我们对OAuth2的流程和模式都有了比较深入的了解,但是到目前为止,我们使用的是第三方的gitee的授权服务器,那么如果我们自己实现一个授权服务器,该如何做呢?那么接下来几章,将会揭晓授权服务器。
2025-01-22 11:19:48
1167
原创 基于Spring Security 6的OAuth2 系列之三 - 客户端--基于Spring Security演示授权码模式
到这里,我们已经通过Spring Security 6的oauth2-client完成了我们在系列2中手动实现的授权码模式获得用户信息的流程。下面我们将会从源代码的方式解析oauth2-client是如何完成这一过程。
2025-01-22 11:15:40
1143
原创 基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式
至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。
2025-01-21 10:46:28
1264
原创 基于Spring Security 6的OAuth2 系列之一 - 开篇入门
这一章我们基本上对OAuth2做什么的做了基本了解,同时还了解了其关键角色以及模式,这两部分都是非常重要的,因为后面编程都需要理清楚你是什么角色,以及采用哪种模式。我们接下来会通过客户端、授权服务器以及资源服务器三个方面讲述整个Spring Security实现OAuth的过程。下面3章主要是从一个Client客户端角色,使用授权码模式,让github给我们授权并访问github获得用户信息,并讲解Spring Security的oauth2-client组件底层原理。
2025-01-21 10:35:42
1095
9
原创 Spring Security 6 系列之十二 - 最后终章
我们通过12章的系列,从底层原理讲到实际应用。基本上揽括了Spring Security 6的功能,当然还有许多功能没有谈到,比如CRSF 、Remember me、密码升级等等,我相信学习完这一系列后,你如果有兴趣了解Spring Security的其它功能,对你来说应该易如反掌。另外现在内部微服务做统一登录认证,都会使用网关+OAuth2方式,这部分我们将会单独开一个系列来讲解。
2024-12-30 14:03:37
896
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人