关于RBAC的总结-上
1. 什么是RBACRBAC,全称是 Role-Based Access Control ,也就是基于角色的访问控制。RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程。也即是将权限问题转换为What、How的问题。Who、What、How构成了访问权限三元组。
2. 为什么需要RBAC2.1 原始权限控制在没有RBAC的时候,如果需要对用户授权,则需要直接将权限授予客户,如下图:
张三可以管理商品,同时可以对商品进行审核;李四只能管理商品,无法审核;
对于这种情况存在以下问题:
当用户数量很多的时候,需要对每一个用户执行授权操作;
当权限新增或者删除的时候,也是需要每个用户单独执行;
当想要快速去除某一部分人的某一部分权限时,操作复杂;
2.2 RBAC针对传统模式的情况,RBAC通过它的权限三元组进行了解决,如图:
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。通过增加角色,权限与角色进行关联,同时用户与角色进行关联,来解决上面的问题。
当新增用户时,只需要关联角色, ...
关于RBAC的总结-下
关于实现方案的简单记录 通过关于RBAC实现的方案记录-上,我们了解到了RBAC的一些基础知识,下面是实际使用中的一些案例情况。
1. 简单模式在常见的平台中,一般会内置超级管理员角色以及admin/root的账号,默认拥有一些或者全部的权限。同时还会内置限制,只有超级管理员才能创建角色、给角色授权,其他的角色是无权操作这些的。对于这种情况,使用的就是RBAC0的模型,有以下特点:
只有超级管理员可以创建角色、授权角色;
所有角色都是平级,修改授权时,不会对其他角色造成影响;
2. 级联模式对于级联模式,使用的就是RBAC1的模型,对角色进行分层,使得角色之间有继承关系。它的特点如下:
创建角色时,需要选父级角色;
对上级角色的授权进行修改时,主要是删减,会影响到子角色,需要自动对齐;
此时根据业务需求,就可以满足:
允许超级管理员操作角色和权限;
也允许将角色操作下放至其他角色,进行数据权限限制;
超级管理员修改角色A的权限时,权限自动收敛,所以A的子角色自动变化;
如果同时将角色和权限的操作下放至其他角色,可能会出现的情况如下:
角色A添加了一个权限,是否允许超级管理 ...
java基础面试题
JAVA基础面试JDK1.8、11新特性HaspMap相关HashMap占多少内存根据对象=对象头+成员变量+对齐填充,HashMap的初始对象大小为:hashmap:头部(8)+int(4*4)+float(4)+table数组引用(4)+entrySet引用(4)+keySet引用(4)+values引用(4)+padding(4)=48字节table:头部(8+4)+长度(4)=16字节总共:64个字节。
null值与无序HashMap允许null作为键值,当null作为键时,存放在0位置;由于HashMap是根据Key的hashcode进行存放,所以是无序的,如果想要有序则使用LinkedHashMap:
LinkedHashMap是HashMap的子类,内部有一个双向链表维护键值对的顺序,每个键值对既位于哈希表中,也位于双向链表中。
数据结构HashMap底层是:数组+链表/红黑树;HashMap默认是一个容量为16的数组,当进行数据存储时,会根据键对应的hashcode选择存放的位置,此时总会出现不同的键但是HashCode一致,需要存放的位置也一样,导致出现哈希冲突, ...
Spring学习笔记-循环依赖
IoC循环依赖什么是循环依赖 循环依赖其实就是循环引⽤,也就是两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环。⽐如A依赖于B,B依赖于C,C⼜依赖于A。
注意,这⾥不是函数的循环调⽤,是对象的相互依赖关系。循环调⽤其实就是⼀个死循环,除⾮有终结条件。
Spring中循环依赖场景有:
构造器的循环依赖(构造器注⼊)
Field 属性的循环依赖(set注⼊)
scope为prototype原型的bean循环依赖(⽆法解决):对于原型bean的初始化过程中不论是通过构造器参数循环依赖还是通过setXxx⽅法产⽣循环依赖,Spring都会直接报错处理。
其中,构造器的循环依赖问题⽆法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采⽤的是提前暴露对象的⽅法。
构造器的循环依赖问题⽆法解决的原因是:Bean加载流程需要先实例化,如果构造器就有依赖会实例化失败,创建流程直接就结束了;
解决方案prototype 原型 ...
Spring学习笔记-IOC源码解析
IOC源码解析通过查看源码,可以得到BeanFactory是Spring的顶级接口。
它提供了一些getBean的方法,它的容器继承体系图,如下所示:
通过其接⼝设计,可以看ApplicationContext除了继承BeanFactory的⼦接⼝,还继承了ResourceLoader(加载资源,用于读取文件等)、MessageSource(国际化)等接⼝,因此其提供的功能也就更丰富了。
IOC容器初始化流程准备工作通过对示例代码进行断点,可以看到多个关键节点的发起位置,都是位于同一个方法:
进入此文件,找到对应的方法,可以看到里面有很多方法,对应了生命周期中的各个节点:
接下来需要去官网进行源码下载,然后导入idea,查看源码。
IOC容器初始化常见的Spring启动方式分为两种:ClassPathApplicationContext和AnnotationConfigApplicationContext;一种以配置文件方式启动,一种是以注解方式启动;
XML配置方式ClassPathApplicationContext查看源码如下:
1234567891 ...
Spring学习笔记-Bean生命周期
SpringBean的生命周期 Spring中Bean的创建是经过了很多的步骤,并且也提供了一些方法,方便在创建过程中获取或执行一些逻辑,完成一下自定义的操作。 我们可以通过这些方法来查看Bean的生命周期。
示例首先创建一个普通的maven项目,引入spring相关依赖:
123456789101112<!--引入Spring IoC容器功能--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.12.RELEASE</version></dependency><dependency> <groupId>javax.annotation</groupId> <artifactId>javax.anno ...
Spring学习笔记-IOC原理及配置
Bean定义模式在Spring的IOC实现中,对于Bean的定义有三种模式:
模式
应用类型
IOC容器启动方式
纯XML
JavaSE
ApplicationContext context = new ClassPathXMLApplicationContext("Beans.xml") 或者 new FileSystemXmlApplicationContext("/root/Bean.xml")
JavaWeb
ContextLoaderListener监听器去加载XML
XML+注解
JavaSE
ApplicationContext context = new ClassPathXMLApplicationContext("Beans.xml") 或者 new FileSystemXmlApplicationContext( ...



