![5c4903d0e54419a07d45744d35ae7b2f.png](https://i-blog.csdnimg.cn/blog_migrate/86c80111fb3ee395443a7867b245b449.jpeg)
1. 什么是RBAC
(1) 请简述什么是RBAC
RBAC(Role-Based Access Control)基于角色的访问控制
RBAC认为权限的过程可以抽象概括为:
判断 [Who 是否可以对 What 进行 How的访问操作(Operator)]
Who:权限的拥有者或主键
What:权限针对的对象或资源
How:具体的权限
Operator:操作.表明对 What的How操作,也就是Privilege+Resource
Role:角色 ,一定数量的权限的集合,权限分配的单位和载体,目的是隔离User
和Privilege的逻辑关系
2. RBAC96模型介绍
(1) 什么是RBAC96模型,还有别的模型吗,分别是什么?
RBAC96模型家族,其中包括了RBAC0-RBAC3 四个概念模型
3. RBAC实战-需求分析和数据库设计
(1) 简述为何要这么设计表结构
对应RBAC的各个关系
4. RBAC实战-创建表
(1) 将设计好的数据库表贴到下面
![eb279b081dfd78a11fdc198a4c890321.png](https://i-blog.csdnimg.cn/blog_migrate/b3019f0a9e78cf6986d7bfae66675e3f.png)
![52ba5abff2c9195dcc01fbff85d2c803.png](https://i-blog.csdnimg.cn/blog_migrate/1d9b3c69d437e0493284940044c34cfb.png)
![80f5960a7b6a42d16de4357638b80d36.png](https://i-blog.csdnimg.cn/blog_migrate/b7caa3b738841dced51a4d3825b27492.png)
![c3c0b5949351f5f7764d71f19ddf678a.png](https://i-blog.csdnimg.cn/blog_migrate/997d7e718b4f2723e69d8d720659355e.png)
5. RBAC实战-添加基础数据
(1) 根据课堂内容将基础数据添加到表中,并简述什么是基础数据
系统运行时提供的最底层的数据
6. RBAC实战-ssm整合
(1) 再次从零开始整合一下ssm框架
1. 配置web,xml文件
1.1:配置服务器上下文参数(告诉spring配置的文件路径)
参数:contextConfigLocation
1.2:配置监听(在服务器启动时创建spring容器对象)
Class:ContextLoaderLister
1.3:配置springmvc
Servlet-Class:DispatcherServlet
1.3.1:配置control的上下文文件,告诉springmvc文件配置路径
参数:contextConfigLocation
1.3.2:拦截的所有请求交给DispatcherServlet处理器处理
2. 配置jdbc.properties(数据库连接文件)
3. 配置`MyBatis文件()
4. 配置application-dao.xml
4.1配置properties文件 context:property-placeholder
4.2:配置数据源(c3p0,spring内置等等)
4.3:创建mybatis的上下文对象
4.3.1:传入数据原
4.3.2:传入mybatis.xml文件(如果你有)
4.4:注册注解扫描器(扫描mapper映射包)
Class:MapperScannerConfigurer
5. 配置application-service
5.1:配置service注解扫描器
Context:component-scan base-package=”service包名”
6.配置application-trans
6.1配置事务管理器切面(面向AOP切面编程)
Class:DataSourceTransactionManager(切面的接口) id:切面id
6.2:配置事务传播行为 (那些方法应该收什么样的事务控制)
Tx:advice transaction-manager: 参考切面id id:事务行为id
6.3配置切面插入的切点
Aop:advisor advice-ref:参考事务行为id
Pointcut=execution(* service.*.*.(..))
6. 配置SqlMapperClient.xml(是springmvc的父容器)
1. 扫描contrrl包下的注解
2. 开启注解驱动 (父容器开启驱动子容器直接容器)
3. 静态资源因映射(放行静态资源)
7. RBAC实战-创建pojo
(1) 将创建好的pojo贴到下面,并解释类与类之间的关系.每个类中的属性分别是什么意思
![20c12a6f8ce81fed9253c2bc4b5d94a6.png](https://i-blog.csdnimg.cn/blog_migrate/daef3b6d62482a238a103fbe597d8b28.jpeg)
![926f5dc8dfd960cc2f9501ee63722f5c.png](https://i-blog.csdnimg.cn/blog_migrate/ad6827549aa60c7b2afb64505dec5cb2.png)
![6bcd0a4e50e8744cc55580f6a28b625f.png](https://i-blog.csdnimg.cn/blog_migrate/829bf96122925f711562d99a4dae105a.jpeg)
![8237e7be074e5b8326de4386e6dfa5f2.png](https://i-blog.csdnimg.cn/blog_migrate/626faa0197ecd96c9deb5fec343fd392.png)
8. RBAC实战-定义resultMap
(1) 视频中定义resultMap的意义是什么?
用来处理对象关系的(配置对象关系)
<resultMap type="com.bjsxt.pojo.Users" id="userMapper">
<id property="username" column="username"/>
<result property="userpwd" column="userpwd"/>
<!--描述对象关系 配置关联对象 roles-->
<association property="roles" javaType="com.bjsxt.pojo.Roles">
<id property="roleid" column="roleid"/>
<result property="rolename" column="rolename"/>
</association>
<!--描述集合关系 配置管理对象 Menus -->
<collection property="menus" ofType="com.bjsxt.pojo.Menus">
<id property="menuid" column="menuid"/>
<result property="menuname" column="menuname"/>
<result property="menuurl" column="menuurl"/>
<result property="fatherid" column="fatherid"/>
</collection>
</resultMap>
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
9. RBAC实战-用户登录(对应视频100-101)
(1) 用户在登录的时候,后台做了哪些业务逻辑处理
1.根据用户名称查询用户所有数据
2.判断查询用户是否为空
3.判断密码是否一致
Users user = userMapper.findUserByName(username);
if (user==null) {
//用户名不存在
throw new UsersException("用户名不存在");
}else if(!userpwd.equals(user.getUserpwd())){
//密码不正确
throw new UsersException("密码有误");
}
10. RBAC实战-页面显示(对应视频102-104)
(1) 贴出首页布局的代码
(2) 什么是Dtree,如何使用Dtree,后台需要注意什么?
javaScript树形菜单
1,参数可以不写完,有默认值(从左至右,依次省略),例tree.add(id,pid,name,url);后面5个参数就可以省略
2,有间隔时的默认值(如存在第6个参数,但第5个参数想用默认值),即tree.add(id,pid,name,url,"",target);必须这样写tree.add(id,pid,name,url,"","","","",true);
3,特殊:如果需要显示title(参数5)必须设定相应链接地址(参数4),tree.add(2,0,‘照明控制系统’,‘a.jsp’,‘这是第四个参数title’);?//如果第四个参数为空则无法显示
(3) 如何在页面中显示树形菜单?
11. RBAC实战-创建用户是否登录Filter
(1) 为什么要检测用户是否登录?
我们可以直接通过地址栏直接访问数据,而我们不允许这种情况发生
(2) 简述Filter的检测逻辑是什么
在用户访问资源之前,将请求拦截,先进行验证,验证成功就通过,验证不成功就跳到另外的界面
12. RBAC实战-什么是越级访问
(1) 简述什么是越级访问,如何改善?
低权限的用户访问高级别的资源
13. RBAC实战-录入资源管理基础数据
(1) 将课堂上的代码敲一遍
14. RBAC实战-查询资源
(1) 将课堂上的代码敲一遍,简述如何查询资源,后台的业务逻辑是如何的.
我们需要在Users实体类中添加funs属性用来存储数据
private List<Funs> funs = new ArrayList<>();
在userMapper.xml中进行配置信息
![f3ef07ef4900d2ae0667718220ee3de6.png](https://i-blog.csdnimg.cn/blog_migrate/94346d0c9f4fe54e675a074eddfdb3d7.png)
更改sql查询语句
![91cbceaf3c1e9be36204739ebd9cd947.png](https://i-blog.csdnimg.cn/blog_migrate/707a1c95d97439f7d3d368f737840760.png)
15. RBAC实战-创建权限过滤器
(1) 创建权限过滤器的意义是什么?权限过滤器的业务逻辑是如何的?
为了防止越级访问,每个角色都有特定的权限,分清界限
1.拦截所有请求
2.放行静态页面请求 和 登录页面请求
3.对请求地址进行判断是否拥有权限(数据库查询),有则放行,没有权限则跳转到指定页面
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response =(HttpServletResponse)arg1;
HttpSession session=request.getSession();
//获取访问路径uri
String uri=request.getRequestURI();
//取出User中的find数据
Users user=(Users) session.getAttribute("user");
//对静态资源放行
if (uri.endsWith(".js") || uri.endsWith(".css") || uri.endsWith(".gif")) {
chain.doFilter(arg0, arg1);
}else {
if (uri.indexOf("login")!=-1 || uri.indexOf("userlogin")!=-1) { //对login和userLogin.jsp放行
chain.doFilter(arg0, arg1);
}else {
List<Funs> funList= user.getFuns();
//开关
boolean flag=false;
for (Funs fun:funList) {
//判断查询的权限和访问的地址是否相等
if (uri.indexOf(fun.getFunurl())!=-1) {
flag=true;
break;
}
}
if (flag) {
chain.doFilter(arg0, arg1);
}else {
response.sendRedirect("roleerror");
}
}