参考 https://blog.csdn.net/aimashi620/article/details/80880007
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。
① shiro是Apache提供的一个强大灵活的安全框架
② shiro提供了认证、授权、企业会话管理、加密、缓存管理相关的功能,使用shiro可以非常方便的完成项目的权限管理模块开发
shiro与spring Security的比较
① Apache shiro: 简单灵活、可脱离spring、粒度较粗
② spring Security: 复杂笨重、不可脱离spring、粒度更细
三个核心组件:Subject, SecurityManager 和 Realms.
Subject:即“当前操作用户”。 Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。
SecurityManager:它是Shiro框架的核心,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
shiro基本工作模式:主体subject提交请求到Security Manager,然后由Security Manager调用Authenticator去做认证,而Authenticator去获取认证数据的时候是通过Realms从数据源中来获取的,然后把从数据源中拿到的认证信息与主体提交过来的认证信息做比对。授权器Authorizer也是一样。
UsernamePasswordToken
分析:是我们放前端传入的登录账号,密码的东西,然后把它置入主题subject
shiro的本质是主题信息subject和认证信息realms做比对
AuthenticationToken用于存储前端传来的登录信息,通俗来说就是用户名及密码等。
而UsernamePasswordToken 继承了AuthenticationToken,是一个简单的包含username及password的登录验证用的token
参考: shiro框架的UsernamePasswordToken与对应Realm中的AuthenticationToken的一点比较(转) - 木西-Muxy - 博客园 (cnblogs.com)
1.Shiro的认证:
① 创建Security Manager:Security Manager是用来提供安全服务的,所以在做shiro认证的时候要先创建此对象
② 主体Subject提交请求给Security Manager
③ Security Manager调用Authenticator组件做认证
④Authenticator通过Realm来从数据源中获取认证数据
授权器Authorizer也是一样。
2.Shiro的授权(shiro授权过程与认证过程基本一致)
3.Shiro取认证数据 Realm获取 本质都继承自AuthorizingRealm
1. IniRealm方式, 配置文件.ini配置用户身份和权限信息
[users]
xiehuaxin=123456,admin
[roles]
admin=user:delete,user:update
2.JdbcRealm方式,引入数据库相关依赖,查数据库字段获取身份和权限信息