自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JWT教程

验证时会先验证签名,再验证令牌有没有过期# 签名验证异常 (生成时和验证时的签名不一致,会出现此异常)# 算法不匹配异常 (生成时和验证时的算法不一致,会出现此异常)# 令牌过期异常 (生成时设置的时间超时后,再次验证会出现此异常)# 失效的payload异常 (出现此异常的原因有:可能有人使用base64解析payload,更改了数据payload里解析的数据,再次传过来,验证时会出现此异常)

2024-07-06 17:04:49 527

原创 (新)Spring Security其它权限校验方法&自定义权限校验方法

我们也可以定义自己的权限校验方法,在@PreAuthorize注解中使用我们的方法。//获取当前用户的权限//判断用户权限集合中是否存在authority在SPEL表达式中使用 @ex相当于获取容器中bean的名字未ex的对象。然后再调用这个对象的hasAuthority方法。

2024-06-23 15:49:06 494

原创 (新)Spring Security如何实现跨域

浏览器出于安全的考虑,使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略,否则就是跨域的HTTP请求。默认情况下是被禁止的。同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。前后端分离项目,前端项目和后端项目一般都不是同源的,所以肯定会存在跨域请求的问题。所以我们就要处理一下,让前端能进行跨域请求。

2024-06-23 14:33:47 294

原创 (新)Spring Security如何自定义失败处理器

Override// 在这里处理认证失败的情况response.getWriter().write("登录失败: " + exception.getMessage());@Override// 在这里处理授权失败的情况response.getWriter().write("权限不足: " + accessDeniedException.getMessage());

2024-06-23 14:18:00 379

原创 (新)Spring Security如何实现授权(实战篇)

例如一个学校图书馆的管理系统,如果是普通学生登录就能看到借书还书相关的功能,不可能让他看到并且去使用添加书籍信息,删除书籍信息等功能。但是如果是一个图书馆管理员的账号登录了,应该就能看到并使用添加书籍信息,删除书籍信息等功能。总结起来就是。这就是权限系统要去实现的效果。我们不能只依赖前端去判断用户的权限来选择显示哪些菜单哪些按钮。因为如果只是这样,如果有人知道了对应功能的接口地址就可以不通过前端,直接去发送请求来实现相关功能操作。

2024-06-23 11:39:51 1071

原创 (新)Spring Security如何实现登录认证(实战篇)

①编写实现类去实现UserDetailsService接口,然后重写里面的loadUserByUsername()方法,用来用来在数据库中查询用户信息并且封装到UserDetail对象中。其中UserDetail是个接口,我们需要编写相应的实体类去实现这个接口。详细内容如4.2.1、4.2.2②更改密码加密存储模式,这时我们就可以使用Spring Security默认提供的登录接口localhost:8080/login来尝试登陆。详细内容如:4.2.3③如何登陆接口?

2024-06-15 16:48:03 1459 2

原创 (新)Spring Security如何实现登录认证(原理篇)

的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。这里我们可以看看下面所提到的过滤器。图中只展示了核心过滤器,其它的非核心过滤器并没有在图中展示。:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。:处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException。:负责权限校验的过滤器。我们可以通过Debug查看当前系统中SpringSecurity过滤器链中有哪些过滤器及它们的顺序。输入求值。

2024-06-10 16:26:06 327

原创 (新)Spring Security快速入门

Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。

2024-06-10 16:08:56 390

原创 Spring Security 应用详解

开发可以避免一些繁琐的工程 搭建和配置,同时它集成了大量的常用框架,快速导入依赖包,避免依赖包的冲突。、 Spring security等,使用。用于开发Spring Security。工程启动会自动扫描启动类所在包下的所有。开发可以大大得高生产率,所以。自动装配机制,这里无需使用。自动装配机制,这里无需使用。的快速开发框架,基于。

2024-06-09 18:27:58 483 1

原创 基础概念-认证授权会话

进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。系统为什么要认证?认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。

2024-06-09 14:43:41 878

原创 Vue中的计算属性和侦听器(监视器)

1.computed有缓存特性,methods没有缓存2.当一个结果依赖其他多个值时,推荐使用计算属性3.当处理业务逻辑时,推荐使用methods方法,比如事件的处理函数watch侦听器的写法有几种?1.简单写法watch: {数据属性名 (newValue, oldValue) {一些业务逻辑 或 异步操作。},'对象.属性名' (newValue, oldValue) {一些业务逻辑 或 异步操作。2.完整写法watch: {// watch 完整写法数据属性名: {

2024-02-02 16:50:43 699

原创 Vue中的指令修饰符&计算属性和方法的区别

1.computed有缓存特性,methods没有缓存2.当一个结果依赖其他多个值时,推荐使用计算属性3.当处理业务逻辑时,推荐使用methods方法,比如事件的处理函数。

2024-02-01 20:39:47 882

原创 Vue中的常用指令

指令(Directives)是 Vue 提供的带有的 特殊 标签。为啥要学:提高程序员操作 DOM 的效率。vue 中的指令按照不同的用途可以分为如下 6 大类:内容渲染指令(v-html、v-text)条件渲染指令(v-show、v-if、v-else、v-else-if)事件绑定指令(v-on)属性绑定指令 (v-bind)双向绑定指令(v-model)列表渲染指令(v-for)指令是 vue 开发中最基础、最常用、最简单的知识点。

2024-02-01 10:31:41 926

原创 什么是Vue & Vue入门案例

基于数据渲染出用户可以看到的界面所谓渐进式就是循序渐进,不一定非得把Vue中的所有API都学完才能开发Vue,可以学一点开发一点所谓框架:就是一套完整的解决方案举个栗子如果把一个完整的项目比喻为一个装修好的房子,那么框架就是一个毛坯房。我们只需要在“毛坯房”的基础上,增加功能代码即可。提到框架,不得不提一下库。库,类似工具箱,是一堆方法的集合,比如 axios、lodash、echarts等框架,是一套完整的解决方案,实现了大部分功能,我们只需要按照一定的规则去编码即可。

2024-01-30 21:16:33 677

原创 Javascript(运算符与表达式、控制语句)

位运算、移位运算⭐️&& ||!⭐️???⭐️...⭐️解构赋值 ⭐️。

2024-01-30 15:40:07 307

原创 第二章. Javascript(变量与数据类型)

function 函数名(参数) {// 函数体return 结果;例。

2024-01-30 13:44:28 860

原创 ES索引库操作

索引库操作有哪些?创建索引库:PUT /索引库名查询索引库:GET /索引库名删除索引库:DELETE /索引库名添加字段:PUT /索引库名/_mapping。

2024-01-29 14:53:59 848

原创 安装elasticsearch、kibana、IK分词器

因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。

2024-01-29 12:14:29 1293

原创 初识elasticsearch

什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API。

2024-01-28 19:13:07 1018

原创 SpringAMQP

Work模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量发布订阅的模型如图:可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化:Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)Exchange:交换机,图中的X。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。

2024-01-27 19:34:43 1083

原创 初识MQ&RabbitMQ快速入门

同步调用的优点:时效性较强,可以立即得到结果同步调用的问题:耦合度高性能和吞吐能力下降有额外的资源消耗有级联失败问题。

2024-01-26 16:37:14 1033

原创 初识Docker(架构、安装Docker)

微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题。

2024-01-24 16:00:46 1411

原创 Gateway服务网关

过滤器的作用是什么?① 对路由的请求或响应做加工处理,比如添加请求头② 配置在路由下的过滤器只对当前路由的请求生效defaultFilters的作用是什么?① 对所有路由都生效的过滤器需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:参数中是否有authorization,authorization参数值是否为admin如果同时满足则放行,否则拦截实现:@Order(-1)@Component@Override// 1.获取请求参数。

2024-01-24 15:12:35 1358

原创 OpenFeign远程调用

使用Feign的步骤:① 引入依赖② 添加@EnableFeignClients注解③ 编写FeignClient接口④ 使用FeignClient中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE(默认)、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制。

2024-01-23 19:48:24 1089

原创 Nacos配置管理

Nacos配置更改后,微服务可以实现热更新,① 通过@Value注解注入,结合@RefreshScope来刷新② 通过@ConfigurationProperties注入,自动刷新注意事项:① 不是所有的配置都适合放到配置中心,维护起来比较麻烦② 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置官方给出的Nacos集群图:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们计划的集群结构:节点ip。

2024-01-22 20:19:20 1015

原创 Nacos注册中心

NacosRule负载均衡策略:①优先选择同集群服务实例列表②本地集群找不到提供者,才去其它集群寻找,并且会报警告③确定了可用实例列表后,再采用随机负载均衡挑选实例。

2024-01-21 19:41:13 985

原创 Ribbon负载均衡

SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。用一幅图来总结一下:基本流程如下:拦截我们的RestTemplate请求RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-serviceDynamicServerListLoadBalancer根据user-service到eureka拉取服务列表eureka返回列表,localhost:8081、localhost:8082。

2024-01-20 15:21:11 1181 1

原创 Eureka注册中心

一次业务中,被其它微服务调用的服务。(提供接口给其它微服务):一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?对于A调用B的业务而言:A是服务消费者,B是服务提供者对于B调用C的业务而言:B是服务消费者,C是服务提供者因此,服务B既可以是服务提供者,也可以是服务消费者。

2024-01-20 14:45:51 1387

原创 微服务-服务拆分和远程调用

任何分布式架构都离不开服务的拆分,微服务也是一样。

2024-01-19 21:05:29 1242

原创 认识微服务

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件。

2024-01-19 20:35:12 855 1

原创 Redis实战之-分布式锁-redission

重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。

2024-01-19 15:27:50 911

原创 Redis实战之-分布式锁

分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路那么分布式锁他应该满足一些什么样的条件呢?可见性:多个线程都能看到相同的结果,注意:这个地方说的可见性并不是并发编程中指的内存可见性,只是说多个进程之间都能感知到变化的意思互斥:互斥是分布式锁的最基本的条件,使得程序串行执行高可用:程序不易崩溃,时时刻刻都保证较高的可用性。

2024-01-18 16:07:11 1237

原创 Redis实战之-优惠卷秒杀

由于现在我们部署了多个tomcat,每个tomcat都有一个属于自己的jvm,那么假设在服务器A的tomcat内部,有两个线程,这两个线程由于使用的是同一份代码,那么他们的锁对象是同一个,是可以实现互斥的,但是如果现在是服务器B的tomcat内部,又有两个线程,但是他们的锁对象写的虽然和服务器A一样,但是锁对象却不是同一个,所以线程3和线程4可以实现互斥,但是却无法和线程1和线程2实现互斥,这就是 集群环境下,syn锁失效的原因,在这种情况下,我们就需要使用分布式锁来解决这个问题。

2024-01-17 11:27:08 908

原创 Redis实现全局唯一Id

每个店铺都可以发布优惠券:当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题:id的规律性太明显受单表数据量的限制场景分析:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。

2024-01-16 20:50:13 625

原创 实战之-Redis商户查询缓存

核心思路如下:修改ShopController中的业务逻辑,满足下面的需求:根据id查询店铺时,如果缓存未命中,则查询数据库,将数据库结果写入缓存,并设置超时时间根据id修改店铺时,先修改数据库,再删除缓存修改重点代码1:修改的queryById方法设置redis缓存时添加过期时间修改重点代码2。

2024-01-15 14:30:12 1027

原创 实战之-Redis代替session实现用户登录

在这个方案中,他确实可以使用对应路径的拦截,同时刷新登录token令牌的存活时间,但是现在这个拦截器他只是拦截需要被拦截的路径,假设当前用户访问了一些不需要拦截的路径,那么这个拦截器就不会生效,所以此时令牌刷新的动作实际上就不会执行,所以这个方案他是存在问题的@Override// 1.获取请求头中的token// 2.基于TOKEN获取redis中的用户// 3.判断用户是否存在// 5.将查询到的hash数据转为UserDTO。

2024-01-14 21:17:48 1047

原创 Redis中的Java客户端

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做官网地址提供了对不同Redis客户端的整合(Lettuce和Jedis提供了统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现。

2024-01-13 17:06:45 935

原创 Redis常见命令、数据类型

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样。

2024-01-11 15:50:03 971

原创 Redis入门

NoSQL最常见的解释是"", 很多人也说它是"NoSQL仅仅是一个概念,泛指非关系型的数据库区别于关系数据库,它们不保证关系数据的ACID特性NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入RedisMemCacheMongoDB等。

2024-01-11 11:05:36 869

原创 InnoDB引擎

① 表空间(ibd文件),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。② 段,分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子节点,索引段即为B+树的非叶子节点。段用来管理多个Extent(区)。③ 区,表空间的单元结构,每个区的大小为1M。默认情况下,InnoDB存储引擎页大小为16K,即一个区中一共有64个连续的页。

2024-01-10 16:58:24 901

安装elasticsearch、kibana、IK分词器

安装elasticsearch、kibana、IK分词器

2024-01-29

安装elasticsearch、kibana、IK分词器

安装elasticsearch、kibana、IK分词器

2024-01-29

Redis基础资料大全

Redis基础资料大全

2024-01-11

第一章. HTML 与 CSS

第一章. HTML 与 CSS

2024-01-10

周氏工具类之批量导入(自用无敌)

批量导入数据到数据库

2023-12-16

周氏工具类之Excel(自用无敌)

周氏工具类之Excel(自用无敌)

2023-12-16

周氏工具类(新版自用无敌)

excel工具类,新版

2023-12-15

实战章节:在Linux上部署各类软件

实战章节:在Linux上部署各类软件

2023-12-13

Excel工具类(超实用)

Excel工具类(超实用)

2023-12-07

Spring Boot常用注解xmind思维导图

Spring Boot常用注解xmind思维导图

2023-11-23

Maven超级详细文档(依赖管理项目构建工具)

Maven超级详细文档(依赖管理项目构建工具)

2023-11-18

Maven依赖管理项目构建工具(保姆级教学)

Maven依赖管理项目构建工具(保姆级教学)

2023-11-17

空空如也

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

TA关注的人

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