如何集成 Spring Security 和 JWT,

关键问题:

  1. 如何集成 Spring Security 和 JWT,并实现用户认证和授权?

SpringSecurity核心是一组过滤器链,JWT是生成token的机制

代码操作:

关于jwt:

1.yml配置中加入jwt配置信息

2.JWT token的JwtUtils.java--生成.---校验token函数

  1. 如何定义和实现用户角色和权限的管理策略?

设计3个表,角色表--用户表---权限表

介绍一下 RBAC 模型:基于角色的访问控制,具体来说:一个用户可以拥有多个角色,每个角色又可以被分配多个权限,就构成"用户-角色-权限"的授权模型

ABAC模型:基于属性的访问控制,不仅基于用户角色,还基于其他属性,就会更灵活和复杂。

权限系统是工作中常用的功能,职责分明,提高效率

采用JWT作为令牌机制,实现用户无状态登录。

  1. 在设计用户、角色、菜单之间的权限关系时,你是如何考虑权限的细粒度控制的?是否支持动态权限分配和实时生效?

需要考虑角色定义:用户被分配一个或多个角色,从而间接获得相应权限。

考虑前端操作:通过按钮元素,在界面允许管理员动态分配权限,然后触发后端服务,实时更新到数据库

考虑日志:用户的权限变更了需要记录,以便审计和监控。

  1. 在使用Spring Security和JWT进行用户认证与授权时,你是如何结合JWT的无状态性和Spring Security的会话管理来实现权限校验的?

  1. Redis在系统中主要用来缓存哪些数据?

    存JWT的token,

  2. 在项目实施过程中,你遇到了哪些技术挑战?是如何解决的?有哪些经验教训可以分享?

  • 怎么实现jwt无状态登录和Security的会话管理 ,涉及到Spring Security与JWT的集成,,做很多配置文件,考虑JWT的生成、验证和刷新机制,安全框架的自定义的认证过滤器、Token存储方案和权限访问,我是通过去搜索相关文章和阅读官方文档解决,获得的经验是了解框架工作原理和流程能显著提高开发效率。

MySQL数据库优化:

使用连接(JOIN)代替子查询、选择最合适的字段属性、使用索引优化查询、优化表结构

额外知识:

jwt无状态:

对外提供的是rest风格的接口,rest风格的规范是:服务的无状态性。

受rest风格的影响

即:服务器不保存任何客户端的请求信息、所以客户端每次请求必须带有自描述信息,通过这些信息识别客户端身份。这就是为什么用api请求的时候要带密钥的原因。

流程:

  1. 客户端第一次登录时,服务端进行信息认证

  2. 认证通过,就会将对用户信息加密形成token,返回给客户端,作为凭证

  3. 以后每次请求,客户端都会带认证的token

  4. 服务端对token解密,判断是否有效。

Spring Security的会话管理

认证通过后,会有一个对象与当前线程绑定,将用户信息保存到Session,避免每次操作都认证。

后端学习路线

https://zhuanlan.zhihu.com/p/667409263

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

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

相关文章

五十一、openlayers官网示例Layer Min/Max Resolution解析——设置图层最大分辨率,超过最大值换另一个图层显示

使用minResolution、maxResolution分辨率来设置图层显示最大分辨率。 <template><div class"box"><h1>Layer Min/Max Resolution</h1><div id"map" class"map"></div></div> </template><…

leetcode-13-[110]平衡二叉树[257]二叉树的所有路径[404]左叶子之和[222]完全二叉树的节点个数

一、[110]平衡二叉树 注意&#xff1a;注释的1、2两处得有返回值-1 class Solution {public boolean isBalanced(TreeNode root) {int result getHeight(root);return result ! (-1);}//高度public int getHeight(TreeNode node){if(nodenull){return 0;}int lh getHeight(…

Java 8 Stream API介绍

Java 8引入了Stream API&#xff0c;这是对集合框架的一种增强&#xff0c;它允许你以一种声明式的方式处理数据集合。Stream API的核心在于将数据的操作分为两个主要阶段&#xff1a;中间操作和终端操作。中间操作返回的是一个新的Stream&#xff0c;可以链式调用多个中间操作…

基于Windows API DialogBox的对话框

在C中&#xff0c;DialogBox函数是Windows API的一部分&#xff0c;它用于在Win32应用程序中创建并显示一个模态对话框。DialogBox函数是USER32.DLL中的一个导出函数&#xff0c;因此你需要在你的C Win32应用程序中链接到这个库。 #include "framework.h" #include …

网信办公布第六批深度合成服务算法备案清单,深兰科技大模型入选

6月12日&#xff0c;国家互联网信息办公室发布了第六批深度合成服务算法备案信息&#xff0c;深兰科技硅基知识智能对话多模态大模型算法通过相关审核&#xff0c;成功入选该批次《境内深度合成服务算法备案清单》。同时入选的还有腾讯混元大模型多模态算法、支付宝图像生成算法…

个人职业规划(含前端职业+技术线路)

1. 了解自己的兴趣与长处 喜欢擅长的事 职业方向 2. 设定长期目标&#xff08;5年&#xff09; 目标内容 建立自己的品牌建立自己的社交网络 适量参加社交活动&#xff0c;认识更多志同道合的小伙伴寻求导师指导 建立自己的作品集 注意事项 每年元旦进行审视和调整永葆积极…

【MySQL】(基础篇十五) —— 增删改数据

增删改数据 本文介绍如何利用SQL的INSERT语句将数据插入表中。以及如何利用UPDATE和DELETE语句进一步操纵表数据。 数据插入 INSERT是用来插入&#xff08;或添加&#xff09;行到数据库表的。插入可以用几种方式使用 插入完整的行&#xff1b;插入行的一部分&#xff1b;插…

jquery动态效果插件之ScrollMagic

ScrollMagic 是一个强大的 JavaScript 库,可以帮助开发者在页面滚动时触发各种动画效果。它支持复杂的滚动交互,非常适合制作富交互的网页。 这里他使用了ScrollMagic的几种滚动效果: 视差滚动效果:页面上的一些元素在滚动时会产生视差滚动效果,即元素以不同的速度移动,营造出…

Linux 查看 CPU核数 及 内存

-- 核数 cat /proc/cpuinfo| grep "processor"| wc -l -- 内存 cat /proc/meminfo # 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| s…

Kotlin 变量详解:声明、赋值与最佳实践指南

Kotlin 变量 变量是用于存储数据值的容器。 要创建一个变量&#xff0c;使用 var 或 val&#xff0c;然后使用等号&#xff08;&#xff09;给它赋值&#xff1a; 语法 var 变量名 值 val 变量名 值示例 var name "John" val birthyear 1975println(name) …

__autoload 函数和sql_autoload_register函数

目录 __autoload定义 __autoload使用 sql_autoload_registe定义 sql_autoload_registe使用 __autoload定义 __autoload 函数在 PHP 5.1.0 版本中引入&#xff0c;用于在尝试使用尚未被定义的类时自动加载该类。 当 PHP 解释器遇到一个未定义的类时&#xff0c;如果存在 __…

C++初学者指南第一步---10.内存(基础)

C初学者指南第一步—10.内存&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---10.内存&#xff08;基础&#xff09;1.内存模型1.1 纸上谈兵&#xff1a;C的抽象内存模型1.2 实践&#xff1a;内存的实际处理 2. 自动存储3.动态存储&#xff1a;std::vector3.1 动态内…

Redis缓存的一些概念性问题

目录 缓存模型和思路 缓存更新策略 数据库和缓存不一致 缓存与数据库双写一致 缓存穿透 缓存雪崩 缓存击穿 速度快,好用&#xff0c;内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力 缓存模型和思路 标准的操作方式就是查询数据库之前先…

C语言 图的基础知识

图 图的基本概念图的存储方法**邻接矩阵**&#xff1a;邻接表 图的遍历深度优先&#xff08;DFS&#xff09;广度优先&#xff08;BFS&#xff09; 最小生成树Prim算法Kruskal算法 最短路径问题 图的基本概念 图的定义&#xff1a; 图是由顶点的非空有穷集合与顶点之间关系&am…

antv g6实现系统拓扑图

1 背景 为例描述各个服务、redis、mysql等之间的联系及其健康状态&#xff0c;构建系统拓扑图&#xff0c;考虑 g6 更适合处理大量数据之间的关系&#xff0c;所以我们采用g6来绘制前端的图形。 g6提供的支持&#xff1a; 节点/边类型多样&#xff0c;同样支持自定义对于节点…

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)

序言 前面文章介绍了在Spring中多种创建Bean实例的方式&#xff0c;包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor。 这篇文章继续介绍Spring中创建Bean的形式之一——factoryMethod。方法用的不多&#xff0c;感兴趣可以当扩展了解。…

【Git】--Part3--远程操作 配置 标签管理

1. 远程仓库 Git 是分布式版本控制系统&#xff0c;同⼀个 Git 仓库&#xff0c;可以分布到不同的机器上。怎么分布呢&#xff1f; 最早&#xff0c;肯定只有⼀台机器有⼀个原始版本库&#xff0c;此后&#xff0c;别的机器可以 “克隆” 这个原始版本库&#xff0c;⽽且每台机…

JEnv-for-Windows 详细使用

管理员执行jenv.bat文件 执行正常, 接下来就是按照官网的命令就行了 文件下载地址 https://download.csdn.net/download/qq_43071699/89462664 JEnv 是一个强大的Java版本管理工具&#xff0c;允许开发者在多个Java版本之间轻松切换。以下是一些常用的JEnv命令&#xff0c;这…

118 杨辉三角

题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 解析 就是模拟法&#xff0c;没有什么特殊的…

【原创】EtherCAT主站IgH解析(二)-- Linux/Windows/RTOS等多操作系统IgH EtherCAT主站移植指南

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;转载请注明出处 https://www.cnblogs.com/wsg1100 如有错误&#xff0c;欢迎指正。 ##前言 目前&#xff0c;EtherCAT商用主站有&#xff1a;Acontis、TwinCAT3、KPA、Codesys等&#xff0c;开源EtherCAT主站则主要…