自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 springboot如何集成redis哨兵集群?

redis主从集群和redis sentinel集群都配置完毕了, 现在我们需要了解spring boot 如何连接上该集群才能用上这两个集群带来的便利。

2023-06-14 17:42:14 1532 1

原创 redis如何配置哨兵集群?

哨兵存在的意义是redis主从集群没有共识算法, 或者说没有选举算法, 所以在master挂掉之后, 无法执行选举出一个新的master, 需要sentinel哨兵集群做监控sentinel哨兵集群使用心跳包的方法, 监听redis主从集群的状态, 通常是每秒1次, ping发现问题之后, 走故障转移流程, 通过选举出新的master, 然后切换master链接。

2023-06-14 17:41:28 400

原创 redis如何配置主从集群?

是master节点的ip, 我们可以在docker-compose.yml文件中配置master的ip。单节点redis的处理能力是有上限的, 所以我们需要配置主从集群。我推荐使用docker配置redis主从集群功能。这些配置在前一篇文章中有讲解, 这里就不细讲咯。那么redis主从集群的整体架构是怎样的?我将redis主从集群设计为一主二从。这一步骤我只给他添加了几层layer。master 节点主要负责写。配置主从集群的最终目的是。slave 节点主要负责读。进入主节点查看主从复制状态。

2023-06-14 17:40:54 252

原创 redis RDB如何进行同步的?

实际上我们只需要保存 master 节点的数据就可以了(写操作一般针对master节点, 而非slave, slave节点一般配置了只读, 不可写), 不需要slave节点, 上面给出的脚本需要自己修改, 我主要是给了个模版, 到时候有多个master也可以修改。个人推荐rdb和aof机制一起使用, 防止数据丢失, 也防止aof没开启, 然后程序员在redis运行时, 发现只开启了RDB, 开启aof重启后, 出现数据丢失的情况。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

2023-06-14 17:40:13 255

原创 rabbitmq的幂等优先级队列和惰性队列

类似于mysql的一致性, 支付了一个商品的价格, 如果商品购买失败, 再次购买该商品, 购买成功, 不会出现扣了两次钱买了一件商品的事情。

2023-06-14 17:38:06 209

原创 redis分布式锁踩坑记录

下面说的问题, 很多都可以使用redisson解决, 所以我就不说redisson了我就说说不用redisson如何解决吧本章只提供思路redis。

2023-06-14 17:37:08 124

原创 rabbitmq整合springboot

本质是根据用户账户分隔出不同的虚拟机, 这样实现各个虚拟机数据的隔离, 但是这种虚拟主机可能共用同一个物理组件, 比如虚拟主机A和虚拟主机B。答: 消费者自定义延迟时间, 因为此时在 queue 上定义 消息过期时间 失效。使用下面命令可以查看rabbitmq开启了几个插件。, 但是在共享的基础上却能做到数据分隔, 这是。找到rabbitmq的plugins文件夹。说明延迟队列对消息的过期时间配置失效。那没办法只能在消费者定义过期时间了。问: 那延迟时间怎么定义?共享相同的物理主机上的。

2023-06-06 10:57:31 66

原创 微服务存在大量远程调用? 请考虑使用消息队列

本质是队列, 存放消息的队列[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnd1NN2A-1686020092900)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/506fe9b6c8834321bad352b9a025d9a4~tplv-k3u1fbpfcp-watermark.image?)]到底是消费者定义各个组件还是生产者定义?exchange还好说, 那么queue怎么办?是给P还是C呢?给C端定义。

2023-06-06 10:56:54 270

原创 rabbitmq死信队列和延迟队列

首先死信队列中消息不能在规定的条件下无法发送给消费者, 到转发到死信队列中的整个过程。

2023-06-06 10:56:50 118

原创 rabbitmq的消息确认和消息回退

前面章节我们至少知道了rabbitmq的几个核心组件, 比如exchangequeue和还有java编程方面的channel和connection但是这些还不够运用于生产环境。

2023-06-06 10:56:09 1263

原创 对Reactor和Proactor模式的探究

当我们的程序需要与外部环境进行交互时,比如从磁盘中读取数据,或者向网络发送数据,就需要进行IO操作。从更本质的角度来看,IO操作其实是在不同的硬件设备之间进行数据传输的过程。在这个过程中,需要有一个能够管理这个传输过程的系统,这个系统通常是操作系统。对于输入设备(比如键盘、鼠标),操作系统会将输入的数据存储在内存中,等待程序来读取。对于输出设备(比如屏幕、打印机),程序会将要输出的数据写入内存中,等待操作系统将其传输到相应的设备上。总的来说,

2023-06-06 10:55:50 186

原创 聊聊redis、epoll和多路IO复用之间的总总关系

这种文章真难写, 都大脑里出来的不知道是不是正确的, 当做一篇纯讨论文章吧。

2023-06-06 10:53:30 480

原创 Spring Security怎么使用OAuth认证?

我们在giteeapp上配置的回调地址如果是那么在本地客户端上也需要配置上这个地址记得修改地址哦, 前面我们用了, 现在改成了gitee还能配置多个回调地址:这个地址相当于我们的登录请求地址, 默认的是默认情况下,请求会被当成普通请求, 只有修改地址才能确保当前重定向到地址时, 该请求会在方法中被认定为登录请求, 进而将请求交给方法去处理, 以完成登录操作.我们可以自定义@Bean.and()​/*** 自定义 ClientRegistrationRepository* @return。

2023-06-06 10:52:48 275

原创 SpringSecurity如何使用JWT认证?

JWT全名叫JSON Web Token, 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。jwt总体结构还是比较简单的, 我们需要注意的点在于jwt的缺点:jwt 比较容易暴露, 由于存放在客户端, 所以我们需要提供 https 协议进行保护, 同时 jwt 的过期时间不宜过长。

2023-06-06 10:52:14 791

原创 Spring Security怎么给方法配置权限的?

目前在Spring Boot中基于方法的权限管理主要是通过注解来实现,我们需要通过:开启Spring Security提供的四个权限注解,以及@PreFilter,这四个注解支持权限表达式,功能比较丰富。:开启Spring Security提供的@Secured注解,该注解不支持权限表达式。:开启JSR-250提供的注解,主要包括@DenyAll@PermitAll以及三个注解,这些注解也不支持权限表达式。:在目标方法执行之后进行权限校验。:在目标方法执行之后对方法的返回结果进行过滤。

2023-06-06 10:50:49 1323

原创 Spring Security下你要怎么设计表结构?

权限是资源的集合, 这里的资源指的是软件中所有的内容,包括模块、菜单、页面、字段、操作功能(增删改查)等等。页面权限、操作权限和数据权限**页面权限:**所有系统都是由一个个的页面组成,页面再组成模块,用户是否能看到这个页面的菜单、是否能进入这个页面就称为页面权限。客户列表、客户黑名单、客户审批页面组成了客户管理这个模块。对于普通用户,不能进行审批操作,即无客户审批页面权限,在他的账号登录后侧边导航栏只显示客户列表、客户黑名单两个菜单。

2023-06-06 10:50:10 448

原创 Spring Security怎么给你授权的(二)

目前在Spring Boot中基于方法的权限管理主要是通过注解来实现,我们需要通过:开启Spring Security提供的四个权限注解,以及@PreFilter,这四个注解支持权限表达式,功能比较丰富。:开启Spring Security提供的@Secured注解,该注解不支持权限表达式。:开启JSR-250提供的注解,主要包括@DenyAll@PermitAll以及三个注解,这些注解也不支持权限表达式。:在目标方法执行之后进行权限校验。:在目标方法执行之后对方法的返回结果进行过滤。

2023-02-03 22:21:53 281

原创 Spring Security怎么给你授权

对了最后再强调一遍, 角色继承和动态权限有冲突, 如果我们的权限 角色 用户 都从数据库读取的话, 那么角色继承将会失效, 这点需要注意, 都能从数据库中修改了, 何必还搞什么角色继承紧接着就是 授权的方式, 一个是 基于过滤器, 另一个是基于 AOP 实现, 说白了, 一个是 URL 粗颗粒度, 另一个是方法, 细颗粒度。

2023-02-03 22:21:41 340

原创 Spring Security之认证添加图片认证

/ 最好的办法就是直接MyDaoAuthenticationProvider加入到Spring Bean里面就行了, 其他都不要 MyDaoAuthenticationProvider authenticationProvider = new MyDaoAuthenticationProvider(Constants . LOGIN_USERNAME , Constants . LOGIN_PASSWORD);和。

2023-02-03 22:19:36 230

原创 Spring Security怎么记住我们的登录信息

小白: “过程虽然简单, 但我觉得你这也不安全吧?不过是换了个名字么?照样不安全吧?小黑: “spring security使用默认的remember-me肯定是不安全的, 你需要开启持久化功能, 也就是下图红框框的类”小白: “那你要怎么修改它内部使用哪个类的呢?小黑: “你有两种方式”和小黑: “也就是这两种方式”小黑: “从他们前面的源码可以看出, 这两种方式有优先级区别, 明显第一种优先级高于后面的。

2023-02-03 22:18:49 882

原创 Spring Security怎么做到升级密码加密方式的

前面把认证的过程源码分析,还有图片都画完之后,我就在想我到底漏讲了什么东西,想了半天实在想不出来,然后就有了这一篇水文。

2023-02-03 22:18:30 438

原创 Spring Security怎么从数据库加载我们的用户

记住怎么自定义, 注意自定义的User需要实现哪些接口, 还有脱敏问题@Override// 设置 password 为 null行, 前面的坑补上了。再试试[外链图片转存中...(img-4jlSIW96-1675433782968)]完美~~~# 总结记住`UserDetailsService`怎么自定义, 注意自定义的`User`需要实现哪些接口, 还有脱敏问题。

2023-02-03 22:17:33 169

原创 Spring Security是怎么用你的账号密码认证的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27Hcjnlx-1675433704432)(null)]没啥好总结的, 都是差不多的流程, 不过还有很多细节没讲, 不过也够了以后看到要自定义啥, 看图就行图片转存中…(img-gFwy01CG-1675433700954)][外链图片转存中…(img-Ruk6bush-1675433700956)]没啥好总结的, 都是差不多的流程, 不过还有很多细节没讲, 不过也够了以后看到要自定义啥, 看图就行。

2023-02-03 22:16:17 445

原创 Spring Security架构和核心类一览

剩下的还有一些涉及到登录成功后怎么做, 登录失败后怎么做, 出现认证异常怎么做, 出现拒绝访问异常怎么做这每一个背后都会有一个接口, 提供功能, 都会有默认实现, 这里讲的全是传统web, 以后前后端分离会讲我想想还有什么没想到的…OAuth?还是JWT相关?忘了是直接使用的这个[外链图片转存中…(img-itryaGJZ-1675433602434)]剩下的还有一些涉及到登录成功后怎么做, 登录失败后怎么做, 出现认证异常怎么做, 出现拒绝访问异常怎么做。

2023-02-03 22:15:20 326

原创 SpringSecurity-基础入门和源码分析(二)

是一个安全管理框架小白:“spring security安全框架不那么麻烦,学习的时候可以把整体分开,各个击破,明确自己这么做的目的是什么,整个学习过程就没那么累了“

2023-02-03 22:13:18 160

原创 SpringSecurity-快速开始(一)

在创建login.html页面, 自定义我们自己的网页由于我们在templates创建html, 所以需要在controller下创建mapping} }

2023-02-03 22:11:53 250

原创 spring-cloud整合dubbo使用nacos做注册中心

前面的入门篇已经讲过了,nacos配置中心的名字必须怎样,回到入门篇去看。这个项目主要是给服务的提供方和消费方提供一个公共的接口协议(接口参数)会占用配置中心了,所以另外新建一个,这个文件主要给后期将我们的。也会在配置中心记录一些数据。项目需要准备的就这些了。服务的提供方步骤结束。.........

2022-07-17 23:30:11 1323 1

原创 入门学习nacos

英文全称为 ,是一个由阿里巴巴团队使用 Java 语言开发的开源项目。 是一个更易于帮助构建云原生应用的动态服务发现、配置管理和服务管理平台(参考自 Nacos 官网)。 的命名是由 3 部分组成:我们可以将 理解成服务注册中心和配置中心的组合体,它可以替换 Eureka 作为服务注册中心,实现服务的注册与发现;还可以替换 Spring Cloud Config 作为配置中心,实现配置的动态刷新。 作为服务注册中心经历了十年“双十一”的洪峰考验,具有简单易用、稳定可靠、性能卓越等优点,可以帮助用户更敏捷、

2022-07-17 20:47:56 1623

原创 十一、kotlin的协程 - 缓存、volatile、内存屏障和cas(四) --- 跑题篇

在使用 的协程库中, 我们会看到很多的 协程调度器 , 如果添加上 函数的话, 我们会看到一些协程的背后还涉及了多线程, 只要有多线程就会存在多线程竞争共享变量的问题你会看到上面的代码使用了两个线程 和 协程用了三个 、 和 但协程 在不同的线程中我们现在分别在 和 间各自执行 次 判断下是否线程安全然后在 和 两个线程间各自执行 次 协程间:线程间:可以看的出来还是存在线程安全问题, 而且协程的线程安全问题还更加不可预知, 用多线程的话, 我们都知道, 它一定线程不安全, 但使

2022-07-12 22:07:35 1753 1

原创 十一、kotlin的协程(三)——热流channel

本质上是一个阻塞队列,只不过多了个可以挂起的函数罢了我们可以把 的 当作 , 但是 使用的是 挂起函数 的 代替 阻塞队列的 , 用挂起函数 代替阻塞队列的 这样 的优势就有了, 不会阻塞当前线程 是一个允许单向信息传递的数据结构, 从管道的写入端写入数据到管道的读取端读取数据, 这些都是串行的, 它的顺序是不变的前面我们知道 冷流 是 ,需要末端操作(可以看成是开关)才会开启 的函数发射元素过来而热流呢?则不需要 什么末端操作(开关),只要 就一定会将元素发送出去,至于 端是否读取,

2022-07-12 22:07:01 720

原创 十一、kotlin的协程(二)

挂起函数可以异步返回单个值, 但如果需要返回多个值怎么办? 此时便可以使用异步流以前没有异步流的情况下, 我们使用传统方式将会是下面这样:随着我们不断学习, 发现还有一种比较好用的方式达到异步返回的功能:对比下两种方式你会发现, 的方式是等半天一下子同时(几乎)打印, 而 的方式是一个一个一个的打印出来现在我们学习了 协程, 发现上面这段代码的 其实是阻塞了主线程, 这是不对的, 如果运行 这段代码的线程是 线程呢? 此时 将会在执行 而阻塞, 用户将会看到卡顿, 所以我们需要改造, 借助协

2022-07-12 22:06:21 768

原创 十一、kotlin的协程(一)

我觉得协程是一种开发人员可以自行决定代码在何处挂起、何处恢复的功能如果我就这么说你肯定会不满意!为什么?因为上面定义的是 类型的协程 ,是 的协程这种线程不支持真正的多线程对于 来说协程即满足了上面的挂起和恢复功能,还满足了 切线程在市面上, 协程的概念没有特别明细, 各个编程语言设计者都有自己的想法和思路, 虽然协程的实现细节可能不一样, 但大体分类还是能区分出来的有栈协程: 这种协程和线程一样, 有着自己的线程栈有栈协程可以在任意函数调用层任意的位置调度, 而无栈协程在这方面表现的力不从心,

2022-07-12 22:05:00 2555

原创 十、kotlin的注解和反射

theme: Chinese-red注解目标kotlin 一个属性包含了很多部分, 它主要由: 字段 + get/set 函数组成, 所以注解的标注需要指定具体标注的谁kotlin注解可以对上面几个位置进行标注 注解的是委托对象委托的是一个叫 的委托对象 注解的是接收者对扩展函数:反编译:对扩展操作符重载:反编译:对扩展属性:反编译: 目标注解主要功能就是将注解标注目标指向文件, 这样的话可以对文件注解前面学过的 改完直接指定了本 文件名为 , 到时候在其他j

2022-07-12 22:04:27 769

原创 九、kotlin的泛型

theme: Chinese-red我们需要将类型当作参数传递给对象, 传递的类型可能会被用于定义属性或者用于函数的泛型参数需要注意:泛型约束()主要内容很多时候我们需要将泛型的类型约束在某个界限, 比如: sum函数的泛型参数 和 参数 并不是什么类型都支持 这项操作, 所以我们需要对传入的类型参数(泛型)做限制, 像下面这样这样操作类似于 java 的 , 限定 必须继承 (或者说必须是的子类).对的, 这样做就不会出现传入俩 的 和 做加法运算符这样尴尬的事情 中的 是两

2022-06-27 11:17:37 1062

原创 八、kotlin的高阶函数

theme: Chinese-red一种以另一个函数为参数、返回值或两者兼顾的函数叫高阶函数整数类型, 可以存放整数, 字符串类型可以存放字符串, 而函数类型则可以存放函数引用上面 和 就是函数类型函数类型的参数名称看两个区别:(1) (2) 除了参数带上名字外, 其实本质上没有区别参数的名字只不过是为了代码的可读性实现一个简化版的 filter函数类型默认参数返回函数的函数根据某些条件判断返回不同的逻辑(函数引用 + 函数参数栈)lambda 的使用场景之一: 去除重复代码Sh

2022-06-27 11:17:03 729

原创 七、kotlin的运算符重载、约定和委托

如果我们定义了个 的操作符重载函数, 那么就可以在该类的实例上使用 运算符, 这就是 规定了很多这种规定, 但这些规定程序员都可以不需要知道, 只要依靠 的智能提示就行了定义一个成员的 操作符重载函数可以看出使用的是修饰符 定义一个操作符重载函数根据约定概念对应了运算符的 对应的可重载的函数还有:不会导致 的优先级低于 操作符左右两边的类型可以不一样需要注意: 操作符重载函数的左右两边顺序不可以调换, 上面定义的函数 类型为左, 类型为右, 所以 是不可以的, 如果需要则

2022-06-27 11:14:51 4089

原创 六、kotlin的函数式编程

答: 在中是一种用限定作用域, 以 区分参数和函数体的表达式, 叫 其本质是代码块, 你也可以理解成可调用的函数类型对象(但根据反编译发现其实不是, 它的实现方式有很多. 比如: 生成一个函数, 然后传递函数引用等等, 方式还挺多)其中 就是lambda表达式 和 表示 lambda函数对象调用 函数优点:缺点:代码可读性较差(用习惯了, 反而比较简单)使用 有些情况下需要注意 , 有时候没有, 但有些时候又有(这在后面有解释)最主要的用法用于参数传递, 一般是函数参数为 函数类型, 我们传递个

2022-06-27 11:14:08 757

原创 五、kotlin标准库函数

函数把当作参数传递给的参数, 然后返回的返回值返回新的值(函数类型参数带扩展) 函数(不是扩展函数) 函数第一个参数是传递接收者, 第二个参数传递的是 匿名扩展函数类型上面的代码我写了个匿名扩展函数变量, 可以代替 函数, 而且使用方式很像源码:的使用场景使用 对象本身数量有点多的时候, 可以考虑使用 我们还可以使用 , 它底层使用的还是 所以这样可以这样:它在返回的时候, 返回的是 String 类型 扩展函数 支持链式调用使用方法: 底层函数: 扩展函数如果

2022-06-27 11:13:23 791

原创 四、kotlin的可空性和基本数据类型

是一种可以为 的类型, 本质是下面这样:作用在不影响程序运行性能的前提下, 显示的帮助程序员避免空指针异常 在java中这样容易出现空指针异常在实际的java项目, 都需要 判断当然 之后出现的 , 但还是麻烦的, 不仅使代码变得冗长而且还存在性能问题使用 kotlin 重写这个函数前需要程序员主动判断该函数是否接受实参为空的情况, 如果需要支持的话,在上面代码中, 如果 为 的话, 则该函数直接返回 , 函数调用者 可以借助返回值 使用 判断是否为空如果实参一定不为

2022-06-27 11:12:55 558

原创 三、kotlin的类和对象(二)

theme: channing-cyan 沿用了 的单继承系统, 不允许 的多继承出现, 但允许 接口的多实现(1) 子类需要继承父类, 子类有责任负责父类字段的初始化(2) 子类最终都需要调用到父类的构造函数以初始化父类的字段, 子类构造函数如果要调用父类构造函数需要使用上 (3) 子类构造函数如果要调用到子类的其他构造函数则需要使用到 覆盖方法(重写方法)kotlin 所有的类、函数和字段默认都添加上了 如果我们需要重写这些功能,可以使用 覆盖属性在字段上: (字段可见性默认是

2022-06-27 11:12:08 813

空空如也

空空如也

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

TA关注的人

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