SpringBoot 整合shiro(一):基本概念信息
shiro相关概念信息整理如下:
一、shiro概述
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
1.
Apache Shiro是一个开源的轻量级的Java安全框架。
2.Shiro是一个强大的简单易用的Java安全框架,主要用来更便捷的认证、授权、加密、会话管理、与Web集成、缓存等
3.Shiro使用起来小而简单
4.spring中有spring security ,是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。
5.shiro不依赖于spring,shiro不仅可以实现web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,
6.shiro属于轻量框架,越来越多企业项目开始使用shiro.
二、shiro的核心概念
1.
Authentication:身份认证/登录
,验证用户是不是拥有相应的身份;
2.Authorization:授权,即权限验证
,验证某个已认证的用户是否拥有某个权限;
3.Session Manager:会话管理
,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;
4.Cryptography:加密
,保护数据的安全性
5.Web Support:Web支持,可以非常容易的集成到Web环境;
6.Caching:缓存
,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
7.Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
8.Testing:提供测试支持;
9. Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
10.Remember Me:记住我
,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
三、主要功能
三个核心组件:Subject, SecurityManager 和 Realms.
1.Subject:即 当前的操作用户
在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。
Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
在代码的任何地方,你都能轻易的获得Shiro Subject。
一旦获得Subject,你就可以立即获得你希望用Shiro为当前用户做的90%的事情 ,登录、退、访问会话、执行授权检查等
2.SecurityManager:
它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
你可以把它看成DispatcherServlet前端控制器。 用于调度各种Shiro框架的服务
3.Realms
Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现
Realm 可以理解为读取用户信息、角色及权限的 DAO;
SecurityManager要验证用户身份与权限,那么它需要从Realm获取相应的信息进行比较以确定用户身份是否合法;可以把Realm看成DataSource,即安全数据源。
4.shiro架构
1.subject:主体
主体可以是用户也可以是程序
,主体要访问系统,系统需要对主体进行认证、授权
。
2.authenticator:认证器
主体进行认证最终通过authenticator进行的。
3.authorizer:授权器
主体进行授权最终通过authenticator进行的。
4. sessionManager:会话管理
web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。
5.sessionDao: 通过sessionDao管理session数据
6.cacheManager: 缓存管理器
主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和 ehcache整合对缓存数据进行管理。
7.realm: 领域 相当于数据源,通过realm存取认证、授权相关数据。
8.cryptography: 密码管理
提供了一套加密/解密的组件,方便开发。比如 提供常用的散列、加/解密等功能。