关键问题:
-
如何集成 Spring Security 和 JWT,并实现用户认证和授权?
SpringSecurity核心是一组过滤器链,JWT是生成token的机制
代码操作:
关于jwt:
1.yml配置中加入jwt配置信息
2.JWT token的JwtUtils.java--生成.---校验token函数
-
如何定义和实现用户角色和权限的管理策略?
设计3个表,角色表--用户表---权限表
介绍一下 RBAC 模型:基于角色的访问控制,具体来说:一个用户可以拥有多个角色,每个角色又可以被分配多个权限,就构成"用户-角色-权限"的授权模型
ABAC模型:基于属性的访问控制,不仅基于用户角色,还基于其他属性,就会更灵活和复杂。
权限系统是工作中常用的功能,职责分明,提高效率
采用JWT作为令牌机制,实现用户无状态登录。
-
在设计用户、角色、菜单之间的权限关系时,你是如何考虑权限的细粒度控制的?是否支持动态权限分配和实时生效?
需要考虑角色定义:用户被分配一个或多个角色,从而间接获得相应权限。
考虑前端操作:通过按钮元素,在界面允许管理员动态分配权限,然后触发后端服务,实时更新到数据库
考虑日志:用户的权限变更了需要记录,以便审计和监控。
-
在使用Spring Security和JWT进行用户认证与授权时,你是如何结合JWT的无状态性和Spring Security的会话管理来实现权限校验的?
-
Redis在系统中主要用来缓存哪些数据?
存JWT的token,
-
在项目实施过程中,你遇到了哪些技术挑战?是如何解决的?有哪些经验教训可以分享?
-
怎么实现jwt无状态登录和Security的会话管理 ,涉及到Spring Security与JWT的集成,,做很多配置文件,考虑JWT的生成、验证和刷新机制,安全框架的自定义的认证过滤器、Token存储方案和权限访问,我是通过去搜索相关文章和阅读官方文档解决,获得的经验是了解框架工作原理和流程能显著提高开发效率。
MySQL数据库优化:
使用连接(JOIN)代替子查询、选择最合适的字段属性、使用索引优化查询、优化表结构
额外知识:
jwt无状态:
对外提供的是rest风格的接口,rest风格的规范是:服务的无状态性。
受rest风格的影响
即:服务器不保存任何客户端的请求信息、所以客户端每次请求必须带有自描述信息,通过这些信息识别客户端身份。这就是为什么用api请求的时候要带密钥的原因。
流程:
-
客户端第一次登录时,服务端进行信息认证
-
认证通过,就会将对用户信息加密形成token,返回给客户端,作为凭证
-
以后每次请求,客户端都会带认证的token
-
服务端对token解密,判断是否有效。
Spring Security的会话管理
认证通过后,会有一个对象与当前线程绑定,将用户信息保存到Session,避免每次操作都认证。
后端学习路线
https://zhuanlan.zhihu.com/p/667409263