在公司里一些权限问题在开发过程中比较麻烦,之前研究过老版本的jeesite,发现里面的权限管理模块部分用到了shiro,总的感觉挺不错的,就把shiro在某站刷了一遍,这类文章记录了从0到springboot整合shiro的全过程,在文章最后放上某站的学习视频连接,可以去看,视频讲的还是非常好的,下面开始进入正题。
权限管理的概念
什么是权限管理
开发需求中经常会有因为用户的部门,岗位,职位等等不同的情况,而能看到的数据范围或者有着相应的功能接口的不同,那么笼统地说,根据某种规则或者策略控制不同用户在不同情况下所能拥有的相应功能或数据就称为权限管理
那么在shiro中,权限管理可以被大致的分为两部分,认证和授权
什么是身份认证
判断一个用户是否为合法用户的处理过程就称为身份认证。最常用简单的方式是系统通过对用户输入的账号和密码与系统中存储的是否一致来判断身份是否正确,也就是常说的登录功能。对于指纹等系统则需要相关硬件的支持
什么是授权
授权即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统中的资源,对于某些资源没有权限是无法访问的
Shiro简介
什么是shiro
在官网中可以看到这样一段话
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.
Apache Shiro™ 是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。借助Shiro易于理解的API,您可以快速轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序。
shiro的核心架构
- Security Manager:
Security Manager是shiro的安全管理器,我们如果想使用shiro在项目中完成权限管理的话就离不开它,也就是说在代码中我们想用shiro的任何功能,我们都必须先拿到Security Manager,通过它,才能进行其他操作。 - SessionManager
SessionManager是在web环境下,shiro要帮我们解决用户认证和授权两大部分,那么原本没用shiro的时候,在用户认证之后我们需要cookie或者session或者其他方式将当前登录用户存储起来。那么用了shiro之后,Session Manager就是shiro在web环境下管理整个session会话的对象 - Session Dao
与Session Manager相对应,就是对Session Manager中的数据进行一些持久化操作的方法 - Cache Manager
在用户认证和授权之后,后续的每次相关权限判断的时候,shiro为了不让程序与数据库进行反复过多的操作,在没改变数据的情况下,后续的获取当前认证用户的操作就交给了缓存Cache Manager进行 - Cryptography
算法生成器或算法生成器,在用户认证时对用户密码或其他信息进行数据加密等操作。 - Authenticator(实现认证)
- Authorizer(实现授权)
- Realms
在shiro中一个叫域的概念,可以理解为shiro具体做认证和授权的逻辑区域。在开发中通常根据自己程序的业务需求,自定义Realm去实现认证和授权的具体逻辑
通过上面的核心架构梳理,我们大致可以清楚要想使用shiro,最简单的需要这么几步:
- 获取Security Manager类
- 用shiro自带的realm或者自定义编写realm
- 通过Authenticator或者Aiuthorizer进行认证或授权