重零搭建SpringSecurity +JWT

news2024/10/2 22:29:09

1、前期工作(创建父工程,导入依赖)

 2、创建启动类

3、测试项目,启动后访问8080端口、hello看有没有页面

 4、引入springSecurity依赖(重新启动,再访问/hello,会跳转到登录页面,用户名是 user,密码在控制台上)

 

 

 

 

 

 

 

 redis相关配置

1、序列化器(redis使用FastJson序列化)

2、Redis配置

3、Redis工具类

JWT配置

1、JWT工具类

 数据

User类

数据库表

mybatis-plus引入及相关配置

  下面进入正戏

1、原版给的是 重内存中查找用户信息,我们是要重数据库中查找,所以主要就是要替换这个类(创建一个UserDetailService的实现类,重写loadUserByUsername()方法)

  这个方法内的主要工作(查询用户信息、查询对应的权限信息,用UserDetails返回)

 

 2、在securityConfig中定义一个加密算法

3、

 登录实现类

 第一步在SecurityConfig中重写(alt+insert,然后选择重写方法,并加入@Bean注解)

 

 后面还有个user.getPassword()

 上面这个认证方法最终就回去调用下面这个方法到数据库中进行认证

 第二步 判断是不是为null

然后去 SecurityConfig中进行配置,就是把那个放行相关那个方法复制进去,然后对登录接口去放行

第三步 使用userId生成jwt

 第四步,将用户信息写入redis中

 

第五步,把JWT的作为token,返回给用户

 

 第六步 JWT校验

 (1)写一个过滤器类,然后获取token(为什么要return; 因为如果不加还会)

 解释:如果token为空,让他去走下面的过滤器(后面的过滤器会做认证),然过滤器自动给它返回相应的异常,同时也要用return;不然还会走下面token不为空的代码。

(2)解析token,获得userId

 (3)从redis中获取用户信息

 (4)存入SecurityContextHolder(UsernamePasswordAuthenticationToken(用户名,密码,是否已认证状态)类 这次用三个参数)

 (5)放行

 第七步 把上面写的过滤器配置到下方箭头这个位置

 

 

 第八步 退出登录(只需定义一个登录接口,然后获取SecurityContextHolder的认证信息,删除redis中的对应数据即可)

 

 获得userId,然后在redis中删除

 第九步 授权(不同用户可以使用不同的功能,权限)

 (1)限制资源访问权限(用注解完成)

 先去配置类中开启注解

api上增加权限注解(现在需要有权限才能访问/hello这个api了)

 

 (2)封装权限信息

增加一个权限字段和有参构造方法 

 重写getAuthorities()方法

写法1

 写法2

 优化(第一次访问才需要转换,之后如果不为空,就不用转换) 

有一个小细节(redis为了安全考虑不会把SimpleGrantAuthority进行序列化,所以不把它序列化到redis中,因为有permissions,所以之后可以再转换)

 登录时候查询对应的权限信息

 校验的时候也需要获取权限

(3)改进(从数据库中查询权限信息)

(用户表,权限表,角色表(一个角色有一组权限,用角色权限表关联,多对多关系),角色和权限关联的表,用户和角色关联表(也是多对多)) 

 

 

 (通过用户角色表获取用户角色,获得角色的信息,再通过角色与角色和权限关联表,获得角色关联的权限id,最后从权限表中获得权限信息,得去重)(2到时候替换成动态的就行)

 select就是上面这个sql,查到用户的权限信息集

 (4)自定义失败处理

认证失败处理类

 

(2) 权限失败处理

 (3)去配置文件配置

 

 第十步 跨域(前后端部署在不同的服务器上,会不同源) 

 springSecurity配置

 结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/864924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统集成项目管理工程师好考吗?不报班能考过吗?

即使不参加培训班,只要自我控制能力还不错,也可以通过考试。中级集成考试难度不大,主要是要理解47个过程的输入输出和工具的使用,很多题目都是按照这个逻辑出的。建议可以在网上或者刷题APP上找一些资料和真题来练习,因…

Ajax 笔记(二)—— Ajax 案例

笔记目录 2. Ajax 综合案例2.1 案例一-图书管理2.1.1 渲染列表2.1.2 新增图书2.1.3 删除图书2.1.4 编辑图书 2.2 案例二-背景图的上传和更换2.2.1 上传2.2.2 更换 2.3 案例三-个人信息设置2.3.1 信息渲染2.3.2 头像修改2.2.3 信息修改2.3.4 提示框 Ajax 笔记: Ajax…

全新 – Amazon EC2 M1 Mac 实例

去年,在 re: Invent 2021 大会期间,我写了一篇博客文章,宣布推出 EC2 M1 Mac 实例的预览版。我知道你们当中许多人请求访问预览版,我们尽了最大努力,却无法让所有人满意。不过,大家现在已经无需等待了。我很…

【C语言】实现通讯录(动态+文件)

目录 前言:一.创建多文件二.保存人的通讯录信息三.构建菜单 - test.c四.函数的声明五.函数的实现1.初始化通讯录2.增加指定联系人3.删除指定联系人4.查找指定联系人5.修改指定联系人6.排序联系人信息(排序名字)7.清理通讯录8.文件存盘 六.全部…

28 玻尔兹曼机

文章目录 28 玻尔兹曼机28.1 模型定义28.2 梯度推导28.3 梯度上升28.4 基于VI[平均场理论]求解后验概率 28 玻尔兹曼机 28.1 模型定义 玻尔兹曼机是一张无向图,其中的隐节点和观测节点可以有任意连接如下图: 我们给其中的节点、连线做出一些定义&#…

css内容达到最底部但滚动条没有滚动到底部

也是犯了一个傻狗一样的错误 ,滚动条样式是直接复制的蓝湖的代码,有个高度,然后就出现了这样的bug 看了好久一直以为是布局或者overflow的问题,最后发现是因为我给这个滚动条加了个高度,我也是傻狗一样的,…

认识Node.js及三个模块

文章目录 1.初识 Node.js1.1 什么是 Node.js1.2 Node.js 中的 JavaScript 运行环境1.3 Node.js 可以做什么1.4 Node.js 环境的安装1.4.1 区分 LTS 版本和 Current 版本的不同1.4.2 查看已安装的 Node.js 的版本号1.4.3 什么是终端1.4.4 终端中的快捷键 1.5 在 Node.js 环境中执…

云安全攻防(七)之 容器逃逸

容器运行时的安全风险 运行时的容器可能发生的攻击形式数不胜数,然而归根结底,所有攻击影响的还是业务系统的机密性、完整性和可用性(CIA三要素)。从这个角度出发,我们可以将攻击做以下的分类: 主要影响机…

从零开始学python(十七)JS逆向专题,看完直接入门

前言 今天讲述Python框架源码专题最后一个部分,爬虫集群部署,前面更新了十五个从零开始学python的系列文章,分别是: 编程语法/网络编程/多线程/多进程/协程/数据库机器学习/全栈开发/数据分析/Hadoop篇/Spark篇爬虫/自动化和抓包…

CMU 15-445 -- Distributed OLAP Databases -21

CMU 15-445 -- Distributed OLAP Databases -21 引言OLTP and OLAPStar Schema vs. Snowflake SchemaProblem Setup本节大纲Execution Models:Push vs. PullExample #1: Push Query to Data in Shared-Nothing ArchitectureExample #2: Pull Data to Query in Share…

ARP协议原理与应用

ARP协议原理与应用 一、ARP协议概述1.1、场景描述1.2、ARP协议概述 二、ARP协议工作原理2.1、ARP工作流程2.2、ARP工作原理2.3、ARP缓存表 三、ARP协议分类3.1、免费ARP(Gratuitous ARP )3.2、代理ARP(Proxy ARP )3.3、RARP与IARP…

详解lambda表达式(一):表达式定义与异常处理

目录 一、lambda表达式 二、lambda表达式实现函数接口 2.1 函数式接口 2.2 lambda表达式实现无参抽象方法 2.3 lambda表达式实现有参抽象方法 2.4 lambad表达式使用代码块 三、lambda表达式调用外部变量 3.1 lambda表达式可以更改类成员变量 3.2 lambda表达式无法更改…

jvs-rules API数据源配置说明(含配置APIdemo视频)

在JVS中,多数据源支持多种形态的数据接入,其中API是企业生产过程中常见的数据形态。使用数据源的集成配置,以统一的方式管理和集成多个API的数据。这些平台通常提供各种数据转换和处理功能,使得从不同数据源获取和处理数据变得更加…

datax-web报错收集

在查看datax时发现日志出现了如上错误,因为项目是部署在本地linux虚拟机上的,使用的是nat网络地址转换,不知道为什么虚拟机的端口号发生了变化,导致数据库根本连接不进去,更新linux虚拟机的ip地址就好

【Wamp】安装 | 局域网内设备访问

安装教程: https://wampserver.site/article/1.html 下载 https://www.wampserver.com/en/ 安装路径上不能有中文 安装好之后图标呈绿色 放入网页文件 将网页文件放置于wamp文件夹的www子文件夹 例如:\Wamp\program\www 修改http端口 WAMP服务器…

9.2.2Socket(TCP)

一.过程: 1.建立连接(不是握手),虽然内核中的连接有很多,但是在应用程序中,要一个一个处理. 2. 获取任务:使用ServerSocket.accept()方法,作用是把内核中的连接获取到应用程序中,这个过程类似于生产者消费者模型. 3. 使用缓冲的时候,注意全缓冲和行缓冲. 4.注意关闭文件资源…

docker复现nginx错误配置漏洞

目录 一、nginx环境搭建 1.1搭建步骤 二、docker复现Nginx配置漏洞 2.1安装docker 2.2复现过程 2.1CRLF(carriage return/line feed)注入漏洞 2.2.目录穿越 一、nginx环境搭建 1.1搭建步骤 1.先创建Nginx的目录并进入(命令如下) mkdir /soft &&…

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法一、问题描述二、解决方法1.打开 WORD 2019,点击菜单中的“文件”;…

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——推论

推论 1. 推出结论题 199-2011-1-28——推出结论题——若题干无论点,考虑:(1)大多数情况,考虑:直接将选项代入题干。 一般将缅甸所产的经过风化或经河水搬运至河谷、河床中的翡翠大砾石,称为“…

棒球课堂的发展规划·棒球联盟

棒球课堂的发展规划 1. 棒球课堂的发展环境 探讨棒球课堂如何通过运用创新的教学方法来适应不断变化的市场需求。包括但不限于,科学地运用大数据和人工智能技术来提高教学效率,加强教师队伍的专业培训,以及拓展课外活动,增强学生…