天天看点

万字搞定 Spring Security!

思维导图如下:

万字搞定 Spring Security!

rbac 全称为基于角色的权限控制,本段将会从什么是 rbac,模型分类,什么是权限,用户组的使用,实例分析等几个方面阐述 rbac.

思维导图

绘制思维导图如下

万字搞定 Spring Security!

什么是 rbac

rbac 全称为用户角色权限控制,通过角色关联用户,角色关联权限,这种方式,间阶的赋予用户的权限,如下图所示

万字搞定 Spring Security!

对于通常的系统而言,存在多个用户具有相同的权限,在分配的时候,要为指定的用户分配相关的权限,修改的时候也要依次的对这几个用户的权限进行修改,有了角色这个权限,在修改权限的时候,只需要对角色进行修改,就可以实现相关的权限的修改。这样做增加了效率,减少了权限漏洞的发生。

对于 rbac 模型来说,分为以下几个模型 分别是 rbac0,rbac1,rbac2,rbac3,这四个模型,这段将会依次介绍这四个模型,其中最常用的模型有 rbac0.

rbac0 是最简单的 rbac 模型,这里面包含了两种。

用户和角色是多对一的关系,即一个用户只充当一种角色,一个角色可以有多个角色的担当。

用户和角色是多对多的关系,即,一个用户可以同时充当多个角色,一个角色可以有多个用户。

此系统功能单一,人员较少,这里举个栗子,张三既是行政,也负责财务,此时张三就有俩个权限,分别是行政权限,和财务权限两个部分。

相对于 rbac0 模型来说,增加了子角色,引入了继承的概念。

万字搞定 Spring Security!

这里 rbac2 模型,在 rbac0 模型的基础上,增加了一些功能,以及限制

即,同一个用户不能拥有两个互斥的角色,举个例子,在财务系统中,一个用户不能拥有会计员和审计这两种角色。

即,用一个角色,所拥有的成员是固定的,例如对于 ceo 这种角色,同一个角色,也只能有一个用户。

即,对于该角色来说,如果想要获得更高的角色,需要先获取低一级别的角色。举个栗子,对于副总经理和经理这两个权限来说,需要先有副总经理权限,才能拥有经理权限,其中副总经理权限是经理权限的先决条件。

即,一个用户可以拥有两个角色,但是这俩个角色不能同时使用,需要切换角色才能进入另外一个角色。举个栗子,对于总经理和专员这两个角色,系统只能在一段时间,拥有其一个角色,不能同时对这两种角色进行操作。

即,rbac1,rbac2,两者模型全部累计,称为统一模型。

万字搞定 Spring Security!

权限是资源的集合,这里的资源指的是软件中的所有的内容,即,对页面的操作权限,对页面的访问权限,对数据的增删查改的权限。举个栗子。对于下图中的系统而言,

万字搞定 Spring Security!

拥有,计划管理,客户管理,合同管理,出入库通知单管理,粮食安全追溯,粮食统计查询,设备管理这几个页面,对这几个页面的访问,以及是否能够访问到菜单,都属于权限。

对于用户组来说,是把众多的用户划分为一组,进行批量授予角色,即,批量授予权限。举个栗子,对于部门来说,一个部门拥有一万多个员工,这些员工都拥有相同的角色,如果没有用户组,可能需要一个个的授予相关的角色,在拥有了用户组以后,只需要,把这些用户全部划分为一组,然后对该组设置授予角色,就等同于对这些用户授予角色。

优点:减少工作量,便于理解,增加多级管理,等。

首先添加依赖

然后添加相关的访问接口

最后启动项目,在日志中查看相关的密码

万字搞定 Spring Security!

访问接口,可以看到相关的登录界面

万字搞定 Spring Security!

输入用户名和相关的密码

万字搞定 Spring Security!

登录成功

在配置文件中,书写相关的登录和密码

在登录页面,输入用户名和密码,即可正常登录

需要自定义类继承 websecurityconfigureradapter 代码如下

即,配置的用户名为 admin,密码为 123,角色为 admin

httpsecurity

这里对一些方法进行拦截

即,这里完成了对所有的方法访问的拦截。

这是一个小 demo,目的,登录以后返回 jwt 生成的 token

添加 web 依赖

万字搞定 Spring Security!

导入 jwt 和 security 依赖

创建 一个相关的 javabean

编写工具类,用来生成 token,以及刷新 token,以及验证 token。

编写 filter 用来检测 jwt

在上方代码中,编写 userdetailsservice,类,实现其验证过程

编写登录业务的实现类 其 login 方法会返回一个 jwtutils 的 token

运行,返回结果为 token

万字搞定 Spring Security!

这里配置 springsecurity 之 json 登录

这里需要重写 usernamepasswordanthenticationfilter 类,以及配置 springsecurity

这样就完成使用 json 登录 springsecurity

需要在 config 类中配置如下内容

即,使用此方法,对密码进行加密, 在业务层的时候,使用此加密的方法

即,使用 bcryptpasswordencoder 对密码进行加密,保存数据库

这里使用数据库认证 springsecurity

这里设计数据表

万字搞定 Spring Security!

这里着重配置 springconfig。

着重讲解了 rbac 的权限配置,以及简单的使用 springsecurity,以及使用 springsecurity + jwt 完成前后端的分离,以及配置 json 登录,和密码加密方式。

-end-

如果看到这里,说明你喜欢这篇文章,请 转发、点赞。同时 标星(置顶)本公众号可以第一时间接受到博文推送。

万字搞定 Spring Security!

最近整理一份面试资料《java技术栈学习手册》,覆盖了java技术、面试题精选、spring全家桶、nginx、ssm、微服务、数据库、数据结构、架构等等。

获取方式:点“ 在看,关注公众号 java后端 并回复 777 领取,更多内容陆续奉上。

喜欢文章,点个在看 

万字搞定 Spring Security!