Redis基础

Redis基础

  1. 概述

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件

主要特点:

  • 基于内存存储,读写性能高

  • 适合存储热点数据(热点商品、资讯、新闻)

  • 企业应用广泛

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

  1. Redis数据类型及命令

  2. 概述

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string

  • 哈希 hash

  • 列表 list

  • 无序集合 set

  • 有序集合 zset

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令

  1. Spring Data Redis

  2. Redis常见的客户端

前面我们讲解了Redis的常用命令,这些命令是我们操作Redis的基础,那么我们在java程序中应该如何操作Redis呢?这就需要使用Redis的Java客户端,就如同我们使用JDBC操作MySQL数据库一样。

Redis 的 Java 客户端很多,常用的几种:

  • Jedis

  • Lettuce

  • Spring Data Redis

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,封装了 Jedis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis。使用起来非常快速和简单。

我们重点学习Spring Data Redis

  1. 概述

Spring Data Redis 是 Spring 的一部分,在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。

Spring Data Redis中提供了一个高度封装的类:Redis**Template**,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:string数据操作

  • SetOperations:set类型数据操作

  • ZSetOperations:zset类型数据操作

  • HashOperations:hash类型的数据操作

  • ListOperations:list类型的数据操作

  1. RBAC权限模型

  2. 概述

在企业系统中,通过配置用户的功能权限可以实现让不同的人分管不同业务的需求。基于RBAC模型,RBAC(Role Based Access Control)模型,它的中文是基于角色的访问控制,主要是将功能组合成角色,再将角色分配给用户,也就是说角色是功能的合集

基于RBAC授权模式后,我们可以达成以下2个目标:

  • 解耦用户和功能,降低操作错误率

  • 降低功能权限分配的繁琐程度

  1. Spring Security

  2. 概述

Spring Security是一个基于Spring框架安全性解决方案,它为应用程序提供了完整的安全管理功能,包括认证、授权、攻击防范和会话管理等

  1. 核心作用

  • 用户登录

    • 校验验证码是否正确

    • 通过spring security框架验证用户是否存在,密码是否正确

    • 查询用户所拥有的权限列表

    • 最后把用户信息封装到jwt生成的token中返回

  • 其他请求(可以是非登录的任意请求),这些校验工作可以全部交给spring security来完成

    • url是否需要检验(访问接口是否需要放行,比如登录、注册、验证码这些接口;还有一些静态资源也需要放行,比如html、js、css等)

    • token校验,是否为空,是否过期,是否正常解析

    • 校验当前访问的url与当前用户的权限是否匹配,匹配则放行,不匹配则是权限不

  1. 权限控制

  2. 认证

认证(Authentication)

认证是用户登录系统时,通过比较用户提供的凭证(如用户名和密码)与系统中存储的信息是否一致,以验证用户身份真实有效的过程

  1. 授权

授权(Authorization):

  • 授权就是用户登录后(认证后),控制用户是否有权限访问某些资源。

  • 下图是给用户赋予角色,并且可以可以赋予多个角色

  1. 权限验证

一个请求过来之后,需要有诸多的校验来能判断是否能有效访问

  • 请求来了以后,比如是doc.htmllogin,是一个静态资源,可直接放行,在SecurityConfig可以配置放行

  • 请求来了以后,比如是/nursing/elder/save,在SecurityConfig没有配置放行,需要校验当前请求携带的token是否有效,如果token无效,则是认证失败,需要重新认证(跳转到登录页)

  • 请求来了以后,比如是/nursing/elder/save,在SecurityConfig没有配置放行,token也有效,则判断当前登录人是否拥有该权限(认证成功后,可以获取用户的权限列表)

    • 如果有权限,则放行

    • 如果没权限,则提醒权限不足

具体的url检验是通过Spring Security的提供的权限注解@PreAuthorize实现的,可以判断具体的url是否可以访问

  • @PreAuthorize 是 Spring Security 框架中提供的一个安全注解,用于实现基于注解的访问控制。它允许开发者在方法级别上声明特定的安全约束,以确保只有满足指定条件的用户才能调用该方法

  • 当 @PreAuthorize 注解被应用于某个方法时,Spring Security 在该方法执行前会先对当前认证的用户进行权限检查。如果检查通过,方法调用得以继续;否则,框架会抛出相应的权限异常(如 AccessDeniedException),阻止方法执行。

  • @PreAuthorize Spring Security框架的权限注解,在执行方法前执行

    • 已经开启注解生效,在SecurityConfig类中添加了如下注解:

    • @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)

  • @ss.hasPermi('system:user:list')

    • 其中的ss是一个被spring管理的bean

      • 位置:zzyl-framework模块中的com.zzyl.framework.web.service.PermissionService

    • hasPermi 是PermissionService类中的一个方法,判断是否拥有该权限

    • system:user:list 为方法的参数

不同的接口调用的方式不太一样,不过,基本的思路都是基于http请求来调用,不过,我们之前使用的http请求,都是前端到后端来发起请求,如下图

  • Client客户端一般都是指浏览器发起了请求

  • Server是指服务端,Java的后端服务

如果从后端调用三方接口,一样也是用的http请求,只是这次请求是从后端到另外一个后端服务,我们需要借助工具才能发起请

HTTP客户端工具有很多

  • HttpClient 体量庞大,jdk11以上支持不好

  • OkHttp 学习成本较高

  • Spring提供的 RestTemplate 后期课程feign会重点讲解

  • 糊涂工具包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值