ssm启动报错cannot find class_SSM整合补充 RBAC(权限控制)过滤器

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) 将设计好的数据库表贴到下面




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贴到下面,并解释类与类之间的关系.每个类中的属性分别是什么意思




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中进行配置信息

更改sql查询语句

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");
}
}
相关文章:
EasyPusher实现Android手机屏幕桌面直播,实时推送操作画面,用于手游直播等应用
本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/52651194由于Android 5.0提供了捕获当前屏幕画面的SDK,基于该SDK,EasyPusher实现了实时推送手机屏幕画面的功能。经测试,效果很不错&…

区块链技术之以太坊ETH白皮书
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 基于中本聪区块链比特币1.0之后,天才少年Vitalik Buterin(V神)在2013年年末发布了以太坊白皮书,其实…

codevs1137 计算系数
1137 计算系数 2011年NOIP全国联赛提高组 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题解题目描述 Description给定一个多项式(ax by)^k,请求出多项式展开后x^n y^m项的系数。 输入描述 Input Description共一行,包含 5 个整数࿰…

选择器优先级_CSS选择器优先级指北
来源:大前端FE(gh_f26dd6c6cfbf)欢迎大家一起来学习前端,期待你加入~相信大部分人刚开始写 css 的时候应该碰到过这样的问题。明明只改了一行样式,然后整个页面就变成了这样↓本文将小节一下 css的优先级,帮助解决碰到的样式重叠 …

区块链膨胀:以太坊客户如何解决存储问题
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 4,270个代币。27,358笔交易。数字小猫463,713。 以太坊最近举办了很多活动,虽然很多加密爱好者认为这是一个积极的信号ÿ…

Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一、进程: 1、语法 2、进程间通讯 3、进程池 二、Gevent协程 三、Select\Poll\Epoll异步IO与事件驱动 一、进程: 1、语法 1 简单的启动线程语法 2 def run(name): 3 time.sleep(2) 4 print("hello",name) 5 6 if __name__ __main__:…

python画圣诞帽_用Python给头像加上圣诞帽
原标题:用Python给头像加上圣诞帽随着圣诞的到来,大家纷纷官微给自己的头像加上一顶圣诞帽。我们有必要写一个程序来做这件事情。用到的工具OpenCVdlib流程一、素材准备首先我们需要准备一个圣诞帽的素材,格式最好为PNG,因为PNG的…
Python知识点进阶——生成器
生成器为什么要将列表转化为迭代器?因为列表太大的话用内存太大,做成迭代器可以节省空间,用的时候再拿出部分。生成器是不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,知道…

以太坊开启区块链2.0时代
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 今天我们唠唠以太坊,这个开启区块链2.0时代的伟大项目。 前面我们说比特币实际上是一个大账本,从比特币白皮书里走出来的区…

手把手教你架构3d游戏引擎pdf_一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟...
Big News!《游戏开发:世嘉新人培训教材》今日开始预售啦!经过漫长的等待,这次终于可以买到了。现在下单,你将在图书出印厂的第一时间收到书哦~这本书由世嘉一线开发者执笔,并被选为世嘉新人培训…

PostgreSQL获取年月日
1.获取当前日期的年份 select to_char(t.detect_date,YYYY) select extract(year from now())为double precision 格式类型select to_char((SELECT now()::timestamp),yyyy) 2.获取下一年select to_char((SELECT now()::timestamp 1 year),yyyy) 3.获取上一年select to_char((S…

查看mysql主外键信息
SELECT *FROMinformation_schema.key_column_usage tWHERE t.constraint_schema 库名称AND t.constraint_name 外键名;转载于:https://www.cnblogs.com/igoodful/p/8954091.html

什么是以太坊,它是区块链2.0的代表,它又什么特点?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 以太坊 是一种全球共享计算,是各种分散应用程序的基础。它有一个独立于比特币的独立区块链,但与之类似。以太坊的区块链有显…

四川第七届 I Travel(bfs)
Travel The country frog lives in has nn towns which are conveniently numbered by 1,2,…,n1,2,…,n. Among n(n−1)2n(n−1)2 pairs of towns, mm of them are connected by bidirectional highway, which needs aa minutes to travel. The other pairs are connected by …

python社会学科需要学些什么_学好Python能做什么
近年来,选择学Python的人也在逐年增多。然而,很多人学Python只是盲目的跟随潮流,对于Python却不了解,学好Python能做什么?今天源码时代小编就来给大家介绍一下Python的就业方向。首先我们要了解一下Python是什么Python是一种计算…

解决Android5.0以后DatePicker选择时间无效的bug。
一、在布局中加上这句话。 加上了这句话后,就相当于强制用5.0以前的外观,所以外观会有所变化: 5.0以上没有这句话的外观: 加上之后的外观: 二、可以用DatePickerDialog代替 转载于:https://www.cnblogs.com/fuyouG/p/f…

【区块链Go语言实现】区块链基本原型
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 0x00 介绍 区块链(Blockchain)是21世纪最具革命性的技术之一,目前它仍处于逐渐成熟阶段,且其发展潜力…

python2和python3 在windows下公用 导致python2 pip无法使用 报ssl的错误
在查找资料的过程中,网上的信息说。高版本的pip是默认使用ssl,而python2的pip是不使用ssl; 本机的环境,是将python2的pip和python3的 pip做过处理的 最后会有一个叫pip2和pip3环境 有可能是我的操作失误,导致直接使用的…

阻塞队列与非阻塞队列
阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场…

python unicodedecodeerror utf8_python-pip install和UnicodeDecodeError:’utf-8’编...
尝试安装:pip install python-binance结果:Exception:Traceback (most recent call last):File "c:\users\анна\appdata\local\programs\python\python36\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_strreturn s…

Go语言指针详解
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 不像 Java 和 .NET,Go语言为程序员提供了控制数据结构的指针的能力;但是,并不能进行指针运算。通过给予程序员基…

java基础--日期--练习集锦
题目1 --日期 借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期 package date;import java.util.Date;public class TestDate {public static void main(String[] args) {long second 1000;long minute 60*second;long hour minut…

python多变量非线性拟合_python实现多变量线性回归(Linear Regression with Multiple Variables)...
本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x2,...,xn)表示为:引入x01,…

【bzoj3150】 cqoi2013—新Nim游戏
www.lydsy.com/JudgeOnline/problem.php?id3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴。可以一堆都不拿,但不可以全部拿走。第二回合也一样,第二个游戏者也有这样一次机会。从第三个回合(又…

再见,Python!你好,Go语言
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 AI 前线导读:Go 语言诞生于谷歌,由计算机领域的三位宗师级大牛 Rob Pike、Ken Thompson 和 Robert Griesemer 写成。由于出身…

tensorflow intel platform 优化
intel平台优化 TensorFlow *是深度学习领域中主要使用的机器学习框架,要求高效利用计算资源。 为了充分利用英特尔架构和提高性能,TensorFlow *库已经使用英特尔MKL-DNN原语进行了优化,该原语是深度学习应用的流行性能库。 已进行优化的平台 …

basePath = request.getScheme()+://+request.getServerName()+:+r
basePath request.getScheme()"://"request.getServerName()":"r (2014-06-30 18:29:54) 转载▼标签: 宠物 分类: JavaString path request.getContextPath();String basePath request.getScheme()"://"request.getSe…

python dump函数_python中实现php的var_dump函数功能
最近在做python的web开发(原谅我的多变,好东西总想都学着。。。node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短,很多不完善的地方。比如我在调…

Go语言的Channel文章,整个人都感觉不好了
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Go的Channel是一个很强大的并发数据模型,在一个发送者和多个消费者情况下工作得最好,但是如果是多个发送者,那么…
图书管理系统(源码)
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId1070 实例使用java语言实现了一个网页版的图片管理系统, 系统前端使用bootstrap技术,可以进行浏览器适配, 实现功能: 管理图书管书, 管理图书借还信息࿰…