【课程简介】
本次课程将结合前后端分离的权限管理应用,精讲主流安全框架Spring Security5.x 的核心技术,带大家系统学习认证与授权的行业解决方案,掌握后端开发必备技能。通过整合SpringSecurity和JWT实现后台用户的登录和授权功能,解决用户后台管理系统中权限管理模块的设计及应用问题。
【课程推荐】后台系统权限管理设计实战
【主讲内容】
1.详解认证模型jwt与RBAC授权模型
2.Spring Security5.x搭建前后端分离项目
3.Java开发入门到进阶技术提升与方法
【主讲教师】
金牌讲师:林老师
高级Java开发工程师,7年后端开发经验,有丰富的高并发、高可用项目开发经验。在公司主导参与过项目重构,并且参与负责系统架构,技术选型等关键项目开发工作。有丰富的带组经验,能给学生提供丰富的产学研项目经验。
用户认证:验证用户身份
验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统;
要求用户提供用户名和密码,系统通过校验用户名和密码来完成认证过程。
用户授权:授予用户响应的权限
验证某个用户是否有权限执行某个操作;
系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
spirng security(30%)
Spring Security是Spring家族中的一个安全管理框架
Apache Shiro(30%)
Shiro是Apache提供的一个安全框架
Sa-Token (20%)
轻量级 Java 权限认证框架
功能全
API完整;成熟的身份认证和用户授权方案;支持缓存;可以前后端分离,适应市场;可以单独使用
搭配技术多
配合spring boot,JWT,OAuth2 授权服务,RBAC角色访问模型等技术或模型更方便快捷
社区资源丰富
遇到问题,可以轻松找到成熟的解决方案;学习资料容易获取;
对于spring更友好
充分利用Spring IoC,DI,和AOP的功能

Session认证
用户登录成功后服务器会将用户的信息保存在session(当前会话)当中,每个session对应有一个sessionid,将该sessionid发送给客户端保存在cookie中。客户端下次访问的时候会将该sessioid带上,在服务器端进行比对看是否存在对应的session以此判断是否登录。

Token认证
用户登录成功后服务端生成一个token发送给客户端,客户端将收到的token存储在cookie或localstorage中,下次访问的时候带上token到服务端验证。

Token的优势


JWT是JSON WEB TOKEN的缩写,它是基于 RFC 7519 标准定义的一种可以安全传输的的JSON对象,用于在各方之间作为 JSON 对象安全地传输信息,JWT允许你解码,认证,和生成JWT。
JWT是由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串。就像这样:
JWT token的格式:header.payload.signature


1.导入依赖
2.添加JWT配置
3.添加JWT Token工具类
4.JWT登录授权过滤器
5.添加安全路径白名单
6.配置Bean对象
7.修改SecurityConfig配置
8.实现前后端分离功能
8.1创建UmsAdminController用于登录获取token
8.2在UmsAdminServiceImpl中添加login方法实现登录获取token逻辑

权限是资源的集合,这里的资源指的是软件中所有的内容,包括模块、菜单、页面、字段、操作功能(增删改查)等等。具体的权限配置上,目前形式多种多样,按照我个人的理解,可以将权限分为:页面权限、操作权限和数据权限

RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限

RBAC模型:用户-角色-权限。所以最基本的我们应该具备用户、角色、权限这三个内容。
1、基本模型-RBAC0:定义了支持RBAC模式的任何产品的最低需求。
2、高级模型-RBAC1、RBAC2:包含RBAC0,各自增加了独立的特点。
RBAC1增加了角色分级概念,一个角色可以从另一个角色继承许可权。
RBAC2增加了一些限制,强调在RBAC的不同组件中配置方面的一些限制。
3、统一模型-RBAC3:包含了RBAC1、RBAC2,RBAC0。
这里我们基于最基本的RBAC0来设计,大家可以根据自己项目的复杂度进行扩展
第一步,需要角色管理列表,在角色管理列表能快速创建一个角色,且创建角色的同时能为角色分配菜单和资源,并且支持创建成功的角色列表能随时进行权限配置的的修改;

第二步,需要用户管理列表,在用户管理列表能快速添加一个用户,且添加用户时有让用户关联角色的功能


1、基于方法的动态权限
2、基于路径的动态权限
时间关系,这个就不讲了,大家可以找老师获取markdown文档,在文档中有实现的代码和流程