spring mvc + shiro
来源:互联网 发布:英雄无敌3 数据修改 编辑:程序博客网 时间:2024/06/06 18:03
转自: http://m.blog.csdn.net/yangqian201175/article/details/51225979
网络上大部分的博文是关于Apache shiro与Spring MVC的整合,以及使用教程,最近在做一个物流项目的时候使用的是Apache shiro与Spring进行整合,期间遇到了一些问题,花费了一些时间才得到解决,所以本文首先会从介绍shiro框架到理解shiro以及使用shiro框架几个角度进行描述如何正确的使用与理解该框架:
- 1、权限概述(正确理解认证、授权的基本概念)
- 2、常见的权限控制的方式(URL拦截的方式、方法注解的方式)
- 3、权限涉及到的数据表以及模型关系
- 4、Apache shiro框架
- 5、整合到项目中
1、权限概述(正确理解认证、授权的基本概念)
- 最初学习角色管理的相关内容的时候主要使用的RBAC权限控制管理模型,记得那会儿最先利用RBAC模型是在本科的时候完成一个人力资源管理系统,很是花费了一些时间。(不过该模型结构清晰,使用方便,便于连接查询,shiro的表设计与RBAC的涉及实质上也是大同小异的);
具体RBAC的学习初步可以参见百度百科的有关介绍:
http://baike.baidu.com/link?url=JxUkSy4blHjN41_u5xjQPiRLTBn7M-daXD9UGpe8z_tM49z2BTbBYpe80YqDeHTnVFvN5LQFyfqzBt7aQ-AmGa
有关概念介绍
在我们开发的一个大中小型系统中提供的功能有许多,并不是所有的用户都有权限可以进行访问以及操作,总是需要对于有些功能进行分组,并且进行访问限制;
认证:系统提供的用于识别用户身份的功能,通常是在登录功能(当前系统登录之后,是谁?如何识别到你是谁登录了系统);
- 授权:系统提供的赋予用户可以操作系统某些功能能力(当前登录系统的用户具有哪些权限功能);
- 单点登录(SSO):一处登录处处使用(可以联想我们在使用淘宝的时候,如果实在同一个终端,比如浏览器中登录了一次,之后我们在使用淘宝旗下的大部分产品的时候不需要进行第二次登录),利用Cookie实现,并且至少需要独立出一台服务器存储用户的登录信息,也就是说用户不是直接登录到系统,需要进行一台服务器的单独认证,如果在服务器中存在有相关用户的登录信息,就可以不用第二次登录;
- Remember me :记住我功能(利用的是Cookie实现);
2、常见的权限控制的方式(URL拦截的方式、方法注解的方式)
两种方式实际上都会遵从的后台流程图如下所示:
而所谓的URL拦截无非就是在中间的一层使用配置文件的配置URL拦截;
而方法注解也就是在对应的业务方法上就像注解标示标示,例如:
- 1
3、权限涉及到的数据表以及模型关系
4、Apache shiro框架
官网地址:http://shiro.apache.org
提供的进行权限控制的方式:
- 1、URL拦截进行权限控制
- 2、方法注解权限控制
- 3、页面标签权限控制
4、代码方式权限控制(了解)
下图来在shiro框架的官方手册:
下图主要是shiro框架的运行流程,来自shiro框架的官方手册:
Application Code:应用程序代码,由开发人员负责(也就是当前的项目代码部分)
- Subject:主体,当前用户,由框架提供的
- SecurityManager:安全管理器,由框架提供的,整个shiro框架最核心的组件。
- Realm:安全数据桥,类似于项目中的DAO,访问安全数据的,框架提供,开发人员也可自己编写
5、整合到项目中
- 导入jar包(shiro的jar有很多,针对不同的项目导入不同的jar包,但是为了防止第一次学习的时候出错,所有使用的是shiro-all-1.2.jar版本的jar包);
- 配置以及代码详细
步骤一: 在web.xml中配置一个过滤器,是由spring提供的,用于整合shiro:
- web.xml文件(一定要注意配置shiro框架以及Spring,Struts之间的顺序问题,否则报错!)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
步骤二: 在applicationContext.xml中配置bean,ID必须为shiroFilter:
- applicationContext.xml文件配置
- shiro 框架由于大量的使用了代理模式,所以在使用的过程中如果配置不当,可能会出现问题,另外在使用注解开发时候尽量的使用Spring的注解,不要使用JDK自带的原生注解,减少出错的几率
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
步骤三: 登录系统使用shrio框架管理,修改Action中login方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
步骤四: 开发属于自己的realm类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
步骤五: shiro框架基于注解的开发:
在上面的applicationContext.xml的配置文件中已经代开了shiro的注解开发代理
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
以上的配置以及代码已经实现了权限管理以及控制功能,并且实现了不同的角色登>录系统之后不同的功能列表的显示;
补充:缓存机制:使用的ehcache缓存机制,需要使用的是ehcache的jar包,以及配置一个ehcache.xml的缓存文件,如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
一下部分单独最为单纯的demo研究使用,一般情况下这样使用不太常见
步骤六:在Action中对应的需要权限管理的方法上@RequestMapping(“XXX”)的注解进行注解标示;
- 1
- 2
- 3
- 4
- 5
步骤七:在XXXRealm中对于该方法进行授权与否
info.addStringPermission(code);
- Shiro+Spring MVC整合
- Shiro+Spring MVC整合
- spring mvc shiro 配置
- spring mvc + shiro
- Shiro系列之Shiro+Spring MVC整合
- Shiro系列之Shiro+Spring MVC整合
- 【Shiro + Spring MVC整合】教程
- Spring mvc + MyBatis 整合Shiro
- Spring MVC 急速集成 Shiro
- Spring mvc+shiro+ehcache整合
- spring mvc与shiro整合
- shiro配置----spring-mvc.xml
- shiro +spring + spring mvc+ mybatis整合
- Shiro集成Spring,Spring,MVC myBatis
- shiro +spring + spring mvc+ mybatis整合
- Spring+Spring MVC+Shiro+Mybatis框架集成
- spring mvc +hibernate +spring +shiro整合
- Spring+Spring MVC +shiro 双数据源
- Android 异步任务:AsyncTask深入探讨
- HDU
- 深入剖析nginx平滑重启
- 存储过程入门
- Netty----什么是Netty学习
- spring mvc + shiro
- 第十五天 jquery和ajax
- Java-数字分类 (20)
- C++_013_数据结构_队列类
- 【Arduino】 使用定时器中断(非库、精度更高)
- 20170716Windows11_4_信号量/互斥体/程序单开应用
- 每日一刷——1.判断两个链表是否相交,若相交求交点(链表不带环&带环)2.fork()问题
- STM32硬件IIC相关的东西
- 存储过程